{"id":1604,"name":"filelock","ecosystem":"pip","repository_url":"https://github.com/tox-dev/py-filelock","issues_count":2388,"created_at":"2025-06-06T15:01:46.905Z","updated_at":"2025-06-06T15:01:46.905Z","purl":"pkg:pypi/filelock","metadata":{"id":2733217,"name":"filelock","ecosystem":"pypi","description":"A platform independent file lock.","homepage":"https://github.com/tox-dev/py-filelock","licenses":"The Unlicense (Unlicense)","normalized_licenses":["Unlicense"],"repository_url":"https://github.com/tox-dev/py-filelock","keywords_array":["application","cache","directory","log","user"],"namespace":null,"versions_count":76,"first_release_published_at":"2014-07-06T10:37:55.000Z","latest_release_published_at":"2025-03-14T07:11:39.000Z","latest_release_number":"3.18.0","last_synced_at":"2025-06-05T23:30:44.119Z","created_at":"2022-04-10T10:59:31.198Z","updated_at":"2025-06-05T23:30:44.119Z","registry_url":"https://pypi.org/project/filelock/","install_command":"pip install filelock --index-url https://pypi.org/simple","documentation_url":"https://py-filelock.readthedocs.io","metadata":{"funding":null,"documentation":"https://py-filelock.readthedocs.io","classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","License :: OSI Approved :: The Unlicense (Unlicense)","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.9","Topic :: Internet","Topic :: Software Development :: Libraries","Topic :: System"],"normalized_name":"filelock"},"repo_metadata":{"id":14387894,"uuid":"17098256","full_name":"tox-dev/filelock","owner":"tox-dev","description":"A platform-independent file lock for Python.","archived":false,"fork":false,"pushed_at":"2024-05-03T17:52:03.000Z","size":1129,"stargazers_count":685,"open_issues_count":14,"forks_count":100,"subscribers_count":16,"default_branch":"main","last_synced_at":"2024-05-04T09:20:02.559Z","etag":null,"topics":["filelock","hacktoberfest","python"],"latest_commit_sha":null,"homepage":"https://py-filelock.readthedocs.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tox-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"tidelift":"pypi/filelock"}},"created_at":"2014-02-23T00:29:27.000Z","updated_at":"2024-06-22T16:40:19.858Z","dependencies_parsed_at":"2023-09-15T13:15:00.276Z","dependency_job_id":"8b1ad33f-e333-4a00-bf79-0d7d0f248617","html_url":"https://github.com/tox-dev/filelock","commit_stats":null,"previous_names":["benediktschmitt/py-filelock","tox-dev/filelock","tox-dev/py-filelock"],"tags_count":73,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tox-dev","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":217590360,"owners_count":16201250,"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":"tox-dev","name":"tox development team","uuid":"20345659","kind":"organization","description":"testing out of the box","email":"gaborjbernat@gmail.com","website":"https://tox.wiki","location":"United Kingdom","twitter":"gjbernat","company":null,"icon_url":"https://avatars.githubusercontent.com/u/20345659?v=4","repositories_count":31,"last_synced_at":"2024-05-01T09:35:00.421Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/tox-dev","funding_links":["https://github.com/sponsors/tox-dev"],"total_stars":8614,"followers":60,"following":0,"created_at":"2022-11-02T16:22:59.135Z","updated_at":"2024-05-01T09:35:49.044Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tox-dev","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tox-dev/repositories"},"tags":[{"name":"3.15.4","sha":"9a979dfe68fab75517c0612952ea401a232055a0","kind":"commit","published_at":"2024-06-22T15:57:18.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.15.4","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.15.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.4/manifests"},{"name":"3.15.3","sha":"3a79343711eef57b864670dc2cafd352ed749d9b","kind":"commit","published_at":"2024-06-19T16:33:09.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.15.3","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.15.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.3/manifests"},{"name":"3.15.2","sha":"192f1efcb95924010d785c3f726433273f6ed114","kind":"commit","published_at":"2024-06-19T14:02:29.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.15.2","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.15.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.2/manifests"},{"name":"3.15.1","sha":"3d7b1a6276144bdbad0086067feb36e1c1a8d2f7","kind":"commit","published_at":"2024-06-12T22:52:50.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.15.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.15.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.1/manifests"},{"name":"3.15.0","sha":"c64787f2a50d7dbc9882f4ac9401c2a2e57cd8aa","kind":"commit","published_at":"2024-06-11T21:22:05.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.15.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.15.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.15.0/manifests"},{"name":"3.14.0","sha":"8556141937a4438603847e6f03a0add4d8b7579d","kind":"commit","published_at":"2024-04-27T18:01:52.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.14.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.14.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.14.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.14.0/manifests"},{"name":"3.13.4","sha":"000a3fa3586ff231dfc564ccf90987ff3852431e","kind":"commit","published_at":"2024-04-09T17:09:25.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.13.4","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.13.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.4/manifests"},{"name":"3.13.3","sha":"f50a3376d7d3343ccdcd7d993548abe63fc2e856","kind":"commit","published_at":"2024-03-25T16:54:35.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.13.3","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.13.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.3/manifests"},{"name":"3.13.2","sha":"9a6437521131490a72e68813164885cecfd1232d","kind":"commit","published_at":"2024-03-25T14:24:53.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.13.2","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.13.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.2/manifests"},{"name":"3.13.1","sha":"141f5d8c21be2830a9d93ad4ad822acf4b0f8a12","kind":"commit","published_at":"2023-10-30T18:28:21.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.13.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.13.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.1/manifests"},{"name":"3.13.0","sha":"3e3455ef9ae8f9751f8f1cdc8d08c7ccfdcd2b2f","kind":"commit","published_at":"2023-10-27T17:06:58.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.13.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.13.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.13.0/manifests"},{"name":"3.12.4","sha":"c1163ae57128cb398a70c3dce3bfd816fc3599f0","kind":"commit","published_at":"2023-09-13T15:59:51.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.12.4","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.12.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.4/manifests"},{"name":"3.12.3","sha":"23130fffbc62850e7867b813d721387c71e58beb","kind":"commit","published_at":"2023-08-28T14:14:00.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.12.3","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.12.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.3/manifests"},{"name":"3.12.2","sha":"3e628d42712fe62432aec6ef1e8026b246c6b2e7","kind":"commit","published_at":"2023-06-12T22:00:43.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.12.2","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.12.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.2/manifests"},{"name":"3.12.1","sha":"64034a25e1749ac09042010a8a492e88b6ec3625","kind":"commit","published_at":"2023-06-10T05:04:30.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.12.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.12.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.1/manifests"},{"name":"3.12.0","sha":"b4713c946cf8bcd65276bffbccef8f269d504dbd","kind":"commit","published_at":"2023-04-18T16:47:56.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.12.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.12.0/manifests"},{"name":"3.11.0","sha":"d3241b9fae9c295086546da72cd02978a6464c4f","kind":"commit","published_at":"2023-04-06T17:21:59.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.11.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.11.0/manifests"},{"name":"3.10.7","sha":"b815134c9bc62aecbe2d8b85a875690d55df5667","kind":"commit","published_at":"2023-03-27T14:56:12.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.10.7","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.10.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.7/manifests"},{"name":"3.10.6","sha":"dfb8cc78d3d31e1a8ec621ccaefd68ee5e8159dd","kind":"commit","published_at":"2023-03-26T03:29:58.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.10.6","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.10.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.6/manifests"},{"name":"3.10.5","sha":"43472a5ec88af90efb5c4e99b849ab596978e834","kind":"commit","published_at":"2023-03-25T20:33:52.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.10.5","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.10.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.5/manifests"},{"name":"3.10.4","sha":"745da618770bd81ad86e3ccbf5e177ac1d541dfa","kind":"commit","published_at":"2023-03-24T13:54:28.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.10.4","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.10.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.4/manifests"},{"name":"3.10.3","sha":"b222c42b6a1b3f08f6b94e9c9f875321de136360","kind":"commit","published_at":"2023-03-23T23:32:39.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.10.3","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.10.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.3/manifests"},{"name":"3.10.2","sha":"d7e1e84e71ad4f530ff263d77718d586656afc87","kind":"commit","published_at":"2023-03-22T23:33:47.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.10.2","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.10.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.2/manifests"},{"name":"3.10.1","sha":"0b102873247c37ccbcc30ce9d1e67e4eb3e7f5d1","kind":"commit","published_at":"2023-03-22T17:33:58.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.10.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.10.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.1/manifests"},{"name":"3.10.0","sha":"d0061e4643df40970494b0b4f261a21f939412f7","kind":"commit","published_at":"2023-03-15T21:06:45.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.10.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.10.0/manifests"},{"name":"3.9.1","sha":"df6b13c030b9f738fb56e9b247328dd98a598d86","kind":"commit","published_at":"2023-03-14T14:33:45.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.9.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.9.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.9.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.9.1/manifests"},{"name":"3.9.0","sha":"1cf8fcae4e688c60a078b1ec9286637141fb35bf","kind":"commit","published_at":"2022-12-28T16:26:38.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.9.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.9.0/manifests"},{"name":"3.8.2","sha":"b8b6f2bdf673bbc404769c8ad749fcd9374af691","kind":"commit","published_at":"2022-12-05T18:20:41.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.8.2","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.8.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.8.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.8.2/manifests"},{"name":"3.8.1","sha":"579ccc3412f2b370d7be64a9616f5d01d1f2e676","kind":"commit","published_at":"2022-12-05T07:46:28.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.8.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.8.1/manifests"},{"name":"3.8.0","sha":"24b26b6be356de80d7212a9f7621d81c6d3eec8d","kind":"commit","published_at":"2022-08-10T06:36:15.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.8.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.8.0/manifests"},{"name":"3.7.1","sha":"4730a40b87cc4b094330b2af7723658428323d60","kind":"commit","published_at":"2022-05-31T20:10:02.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.7.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.7.1/manifests"},{"name":"3.7.0","sha":"45556083855b570d0a41a30ddd35f8e0c09efa1f","kind":"commit","published_at":"2022-05-13T08:28:51.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.7.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.7.0/manifests"},{"name":"3.6.0","sha":"befd166e05638e2d5921b1e9073c53643ed95e62","kind":"commit","published_at":"2022-02-17T18:12:05.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.6.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.6.0/manifests"},{"name":"3.5.1","sha":"46e4d0bbb27666118a1655c6d9905a400a15123c","kind":"commit","published_at":"2022-02-16T14:01:37.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.5.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.5.1/manifests"},{"name":"3.5.0","sha":"9ca0f61f7cca02f5b8a5591f72b2a9054e452627","kind":"commit","published_at":"2022-02-15T09:05:48.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.5.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.5.0/manifests"},{"name":"3.4.2","sha":"87acc9fc633af660383a4d96ee51bda317206bb4","kind":"commit","published_at":"2021-12-26T17:00:48.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.4.2","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.4.2/manifests"},{"name":"3.4.1","sha":"6823192602b24e6540bad0ca69ae53452c910a38","kind":"commit","published_at":"2021-12-26T14:11:14.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.4.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.4.1/manifests"},{"name":"3.4.0","sha":"a6c8fabc4192fa7a4ae19b1875ee842ec5eb4f61","kind":"commit","published_at":"2021-11-16T11:01:36.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.4.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.4.0/manifests"},{"name":"3.3.2","sha":"a7276eedecde9852dc3d22d264a76adfe1e4b4b1","kind":"commit","published_at":"2021-10-29T09:51:17.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.3.2","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.3.2/manifests"},{"name":"3.3.1","sha":"592942c75eb9c225cd34113870bcc3c9c1282395","kind":"commit","published_at":"2021-10-15T07:41:50.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.3.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.3.1/manifests"},{"name":"3.3.0","sha":"e5b4e105e0f6cf5365e6a6454b3e3a223becd9a6","kind":"commit","published_at":"2021-10-03T00:48:34.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.3.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.3.0/manifests"},{"name":"3.2.1","sha":"a4f87da9658d58960d2d181c41d0ca0951e8a922","kind":"commit","published_at":"2021-10-02T16:24:55.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.2.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.2.1/manifests"},{"name":"3.2.0","sha":"c9b6d90b8d0d6f3971b97ce7bfd1b3402d58220e","kind":"commit","published_at":"2021-09-30T00:24:32.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.2.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.2.0/manifests"},{"name":"3.1.0","sha":"793610794a444bd9d2773615a6e483de349acc4f","kind":"commit","published_at":"2021-09-27T08:58:56.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/3.1.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/3.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/3.1.0/manifests"},{"name":"v3.0.12","sha":"b30bdc4fb998f5f4350257235eb51147f9e81862","kind":"tag","published_at":"2019-05-18T18:14:59.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.12","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.12/manifests"},{"name":"v3.0.9","sha":"b71c3a494b1a9a84ddaa4a4d43bfd985a01e81e7","kind":"tag","published_at":"2018-11-01T17:24:04.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.9","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.9/manifests"},{"name":"v3.0.8","sha":"0980867d17db4a3e1b20d588b680582cbbf7e778","kind":"tag","published_at":"2018-11-01T17:23:24.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.8","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.8/manifests"},{"name":"v3.0.7","sha":"df390656156c4cfd68a320a1335f3b63260d29b0","kind":"tag","published_at":"2018-11-01T17:23:07.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.7","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.7/manifests"},{"name":"v3.0.6","sha":"b3db9dca56d49a1c2d9f574bbaa4b0dee40c75d1","kind":"tag","published_at":"2018-11-01T17:22:45.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.6","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.6/manifests"},{"name":"v3.0.5","sha":"5149783c9d79e657af2bf8c6e80d8b8cc6054779","kind":"tag","published_at":"2018-11-01T17:22:20.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.5","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.5/manifests"},{"name":"v3.0.10","sha":"05f0d9032ef390e15aa8808c2b5ffc38d2300d6d","kind":"tag","published_at":"2018-11-01T17:20:54.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.10","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.10/manifests"},{"name":"v3.0.4","sha":"ea542a6fcaf33d86fead5a29bee34c7da4f6952f","kind":"tag","published_at":"2018-02-01T11:00:25.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.4","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.4/manifests"},{"name":"v3.0.3","sha":"1023d67ac2de7de90e897d0a4f1b3b8d3c5636d6","kind":"tag","published_at":"2018-01-30T02:01:34.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.3","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.3/manifests"},{"name":"v3.0.1","sha":"8947f9181cb9a0ba9102f54c8a62e7ab7a6c0446","kind":"tag","published_at":"2018-01-30T01:54:37.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.1/manifests"},{"name":"v3.0.0","sha":"f9a00a82f3845c0dba8e8315f747c4590e8b0798","kind":"tag","published_at":"2018-01-05T10:39:10.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v3.0.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/v3.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v3.0.0/manifests"},{"name":"v2.0.13","sha":"f4d074d50bf6155a50a752f2ea70cf58a3b5f762","kind":"tag","published_at":"2017-11-05T22:02:05.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.13","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.13/manifests"},{"name":"v2.0.12","sha":"0de5909050a61c4aba25e89a1c1024cb695ac4cb","kind":"tag","published_at":"2017-11-05T21:32:51.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.12","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.12","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.12/manifests"},{"name":"v2.0.11","sha":"4689bd45d82b7290cdd5313feb34ffc8adcc00bd","kind":"tag","published_at":"2017-11-05T21:32:18.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.11","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.11/manifests"},{"name":"v2.0.10","sha":"4341e5aadb9df6d5bb0c1c41999b44527b59017d","kind":"tag","published_at":"2017-11-05T21:31:55.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.10","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.10","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.10","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.10/manifests"},{"name":"v2.0.9","sha":"97aa83539d4df8bcaa3716ced5b2255b4397868d","kind":"tag","published_at":"2017-11-05T21:31:29.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.9","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.9","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.9/manifests"},{"name":"v2.0.8","sha":"252a308f2844f16f9ad77fd5a4e9da4c3f5f4c3c","kind":"tag","published_at":"2017-11-05T21:30:59.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.8","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.8","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.8","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.8/manifests"},{"name":"v2.0.7","sha":"57a541fb0bcedb9250877da8a5003a695f7f8aa9","kind":"tag","published_at":"2017-11-05T21:29:45.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.7","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.7","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.7","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.7/manifests"},{"name":"v2.0.6","sha":"fde6c13718dd98ca50a9e3378f972706035b57c6","kind":"tag","published_at":"2017-11-05T21:28:55.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.6","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.6/manifests"},{"name":"v2.0.5","sha":"d9dd5b6db3f5354d1b09dbda1808a67be7bd4f3e","kind":"tag","published_at":"2017-11-05T21:27:31.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.5","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.5/manifests"},{"name":"v2.0.4","sha":"0a23a335c2835f2b74144cbc087a65c23f34b7de","kind":"tag","published_at":"2017-11-05T21:25:31.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.4","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.4/manifests"},{"name":"v2.0.3","sha":"c3e8cc0f02f6a8832794781595cb668d02e6046b","kind":"tag","published_at":"2017-11-05T21:25:05.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.3","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.3/manifests"},{"name":"v2.0.2","sha":"51b7aa2fc285f5a6b3b654661eafec753765efd8","kind":"tag","published_at":"2017-11-05T21:24:45.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.2","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.2/manifests"},{"name":"v2.0.1","sha":"7a899a0f6034db0ac1a91953d73722fd4a402823","kind":"tag","published_at":"2017-11-05T21:24:23.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.1/manifests"},{"name":"v2.0.0","sha":"7612dd33af6fd817c6270197e66a1f42aea83546","kind":"tag","published_at":"2017-11-05T21:23:41.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v2.0.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/v2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v2.0.0/manifests"},{"name":"v1.0.3","sha":"3ad521dc05f0448c85063120fcae5f254c2875e8","kind":"tag","published_at":"2017-11-05T21:21:06.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v1.0.3","html_url":"https://github.com/tox-dev/filelock/releases/tag/v1.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v1.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v1.0.3/manifests"},{"name":"v1.0.2","sha":"c2b35ba13fbd8470d80c3eec08b199fdd04311fb","kind":"tag","published_at":"2017-11-05T21:20:45.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v1.0.2","html_url":"https://github.com/tox-dev/filelock/releases/tag/v1.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v1.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v1.0.2/manifests"},{"name":"v1.0.1","sha":"74e4e733d09451fd92228e3836d3ceb356ea5fb8","kind":"tag","published_at":"2017-11-05T21:20:23.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v1.0.1","html_url":"https://github.com/tox-dev/filelock/releases/tag/v1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v1.0.1/manifests"},{"name":"v1.0.0","sha":"669b9ff37476e9ee3ae7af136bd4668e74b8b1af","kind":"tag","published_at":"2017-11-05T21:19:43.000Z","download_url":"https://codeload.github.com/tox-dev/filelock/tar.gz/v1.0.0","html_url":"https://github.com/tox-dev/filelock/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tox-dev%2Ffilelock/tags/v1.0.0/manifests"}]},"repo_metadata_updated_at":"2024-09-07T06:07:08.822Z","dependent_packages_count":957,"downloads":233371729,"downloads_period":"last-month","dependent_repos_count":58293,"rankings":{"downloads":0.008070329251091787,"dependent_repos_count":0.024210987753275362,"dependent_packages_count":0.029896901543817304,"stargazers_count":3.279121507977704,"forks_count":5.963606483409054,"docker_downloads_count":0.013572826467745278,"average":1.553079839400448},"purl":"pkg:pypi/filelock","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/filelock","docker_dependents_count":8516,"docker_downloads_count":2894680506,"usage_url":"https://repos.ecosyste.ms/usage/pypi/filelock","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/filelock/dependencies","status":null,"funding_links":["https://tidelift.com/funding/github/pypi/filelock","https://github.com/sponsors/tox-dev"],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/filelock/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/filelock/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/filelock/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/filelock/related_packages","maintainers":[{"uuid":"benediktschmitt","login":"benediktschmitt","name":null,"email":null,"url":null,"packages_count":4,"html_url":"https://pypi.org/user/benediktschmitt/","role":null,"created_at":"2022-12-05T18:49:23.580Z","updated_at":"2022-12-05T18:49:23.580Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/benediktschmitt/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690055,"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":1556,"unique_repositories_count_past_30_days":11,"recent_issues":[{"uuid":"4966765057","node_id":"PR_kwDOIiR3Sc71w7jq","number":256,"state":"closed","title":"chore(deps): Bump the pip-version-updates group across 1 directory with 38 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-29T09:17:07.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-24T08:38:17.000Z","updated_at":"2026-07-29T09:17:08.000Z","time_to_close":434330,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"pip-version-updates","update_count":38,"packages":[{"name":"annotated-types","old_version":"0.7.0","new_version":"0.8.0","repository_url":"https://github.com/annotated-types/annotated-types"},{"name":"anthropic","old_version":"0.111.0","new_version":"0.119.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"anyio","old_version":"4.14.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"boto3","old_version":"1.43.33","new_version":"1.43.55","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.33","new_version":"1.43.55","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.6.17","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"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":"filelock","old_version":"3.29.4","new_version":"3.32.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"hf-xet","old_version":"1.5.1","new_version":"1.5.2","repository_url":"https://github.com/huggingface/xet-core"},{"name":"html5tagger","old_version":"1.3.0","new_version":"2.0.0","repository_url":"https://github.com/sanic-org/html5tagger"},{"name":"huggingface-hub","old_version":"1.20.1","new_version":"1.24.0","repository_url":"https://github.com/huggingface/huggingface_hub"},{"name":"humanize","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"jiter","old_version":"0.15.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"lazy-model","old_version":"0.2.0","new_version":"0.4.0"},{"name":"narwhals","old_version":"2.22.1","new_version":"2.24.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"numpy","old_version":"2.4.6","new_version":"2.5.1","repository_url":"https://github.com/numpy/numpy"},{"name":"openai","old_version":"2.43.0","new_version":"2.48.0","repository_url":"https://github.com/openai/openai-python"},{"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.10.0","new_version":"4.11.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"python-engineio","old_version":"4.13.2","new_version":"4.13.3","repository_url":"https://github.com/miguelgrinberg/python-engineio"},{"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.19.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"scipy","old_version":"1.17.1","new_version":"1.18.0","repository_url":"https://github.com/scipy/scipy"},{"name":"setuptools","old_version":"82.0.1","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"tracerite","old_version":"2.3.1","new_version":"2.6.3","repository_url":"https://github.com/sanic-org/tracerite"},{"name":"typer","old_version":"0.25.1","new_version":"0.27.0","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":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"tzlocal","old_version":"5.4.3","new_version":"5.4.4","repository_url":"https://github.com/regebro/tzlocal"},{"name":"wcwidth","old_version":"0.8.1","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"pytest","old_version":"9.1.0","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"coverage","old_version":"7.14.1","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"astroid","old_version":"4.0.4","new_version":"4.1.2","repository_url":"https://github.com/pylint-dev/astroid"},{"name":"tomlkit","old_version":"0.15.0","new_version":"0.15.1","repository_url":"https://github.com/python-poetry/tomlkit"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-version-updates group with 38 updates in the /server directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [annotated-types](https://github.com/annotated-types/annotated-types) | `0.7.0` | `0.8.0` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.111.0` | `0.119.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.0` | `4.14.2` |\n| [boto3](https://github.com/boto/boto3) | `1.43.33` | `1.43.55` |\n| [botocore](https://github.com/boto/botocore) | `1.43.33` | `1.43.55` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.6.17` | `2026.7.22` |\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| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.4` | `3.32.0` |\n| [hf-xet](https://github.com/huggingface/xet-core) | `1.5.1` | `1.5.2` |\n| [html5tagger](https://github.com/sanic-org/html5tagger) | `1.3.0` | `2.0.0` |\n| [huggingface-hub](https://github.com/huggingface/huggingface_hub) | `1.20.1` | `1.24.0` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.15.0` | `4.16.0` |\n| [jiter](https://github.com/pydantic/jiter) | `0.15.0` | `0.16.0` |\n| lazy-model | `0.2.0` | `0.4.0` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.22.1` | `2.24.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.6` | `2.5.1` |\n| [openai](https://github.com/openai/openai-python) | `2.43.0` | `2.48.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.11.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [python-engineio](https://github.com/miguelgrinberg/python-engineio) | `4.13.2` | `4.13.3` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.0.1` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.19.0` | `0.19.2` |\n| [scipy](https://github.com/scipy/scipy) | `1.17.1` | `1.18.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `83.0.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.69.0` |\n| [tracerite](https://github.com/sanic-org/tracerite) | `2.3.1` | `2.6.3` |\n| [typer](https://github.com/fastapi/typer) | `0.25.1` | `0.27.0` |\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| [tzlocal](https://github.com/regebro/tzlocal) | `5.4.3` | `5.4.4` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.8.1` | `0.8.2` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.1.0` | `9.1.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.1` | `7.15.2` |\n| [astroid](https://github.com/pylint-dev/astroid) | `4.0.4` | `4.1.2` |\n| [tomlkit](https://github.com/python-poetry/tomlkit) | `0.15.0` | `0.15.1` |\n\n\nUpdates `annotated-types` from 0.7.0 to 0.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/annotated-types/annotated-types/releases\"\u003eannotated-types's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.8.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRename DocInfo to Doc by \u003ca href=\"https://github.com/zen-xu\"\u003e\u003ccode\u003e@​zen-xu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/80\"\u003eannotated-types/annotated-types#80\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.13 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/83\"\u003eannotated-types/annotated-types#83\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix docstring of \u003ccode\u003eTimezone\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/annotated-types/annotated-types/pull/84\"\u003eannotated-types/annotated-types#84\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate license-files to be PEP-639 compliant (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/85\"\u003e#85\u003c/a\u003e) by \u003ca href=\"https://github.com/shoeffner\"\u003e\u003ccode\u003e@​shoeffner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/86\"\u003eannotated-types/annotated-types#86\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typo in README.md by \u003ca href=\"https://github.com/camiloaz\"\u003e\u003ccode\u003e@​camiloaz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/87\"\u003eannotated-types/annotated-types#87\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd CI for PyPy3.11 and fix test (issue 71) by \u003ca href=\"https://github.com/mattip\"\u003e\u003ccode\u003e@​mattip\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/88\"\u003eannotated-types/annotated-types#88\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix string predicate names in doc by \u003ca href=\"https://github.com/leogermond\"\u003e\u003ccode\u003e@​leogermond\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/90\"\u003eannotated-types/annotated-types#90\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd SPDX license expression by \u003ca href=\"https://github.com/wichert\"\u003e\u003ccode\u003e@​wichert\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/92\"\u003eannotated-types/annotated-types#92\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded Python 3.14 to the test matrix by \u003ca href=\"https://github.com/imtoopunkforyou\"\u003e\u003ccode\u003e@​imtoopunkforyou\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/96\"\u003eannotated-types/annotated-types#96\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 and drop EOL 3.8-3.9 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/97\"\u003eannotated-types/annotated-types#97\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in \u003ccode\u003eLen\u003c/code\u003e docstring by \u003ca href=\"https://github.com/Dutcho\"\u003e\u003ccode\u003e@​Dutcho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/100\"\u003eannotated-types/annotated-types#100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 0.8.0 release by \u003ca href=\"https://github.com/adriangb\"\u003e\u003ccode\u003e@​adriangb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/103\"\u003eannotated-types/annotated-types#103\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/zen-xu\"\u003e\u003ccode\u003e@​zen-xu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/80\"\u003eannotated-types/annotated-types#80\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/83\"\u003eannotated-types/annotated-types#83\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shoeffner\"\u003e\u003ccode\u003e@​shoeffner\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/86\"\u003eannotated-types/annotated-types#86\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/camiloaz\"\u003e\u003ccode\u003e@​camiloaz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/87\"\u003eannotated-types/annotated-types#87\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mattip\"\u003e\u003ccode\u003e@​mattip\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/88\"\u003eannotated-types/annotated-types#88\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/leogermond\"\u003e\u003ccode\u003e@​leogermond\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/90\"\u003eannotated-types/annotated-types#90\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wichert\"\u003e\u003ccode\u003e@​wichert\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/92\"\u003eannotated-types/annotated-types#92\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/imtoopunkforyou\"\u003e\u003ccode\u003e@​imtoopunkforyou\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/96\"\u003eannotated-types/annotated-types#96\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dutcho\"\u003e\u003ccode\u003e@​Dutcho\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/100\"\u003eannotated-types/annotated-types#100\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\"\u003ehttps://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.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/annotated-types/annotated-types/commit/9eb96680138269811a39d838d720abc3dce33954\"\u003e\u003ccode\u003e9eb9668\u003c/code\u003e\u003c/a\u003e Prepare for 0.8.0 release (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/103\"\u003e#103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/10b77644f88b385357653730a1ab23748ca3ae2e\"\u003e\u003ccode\u003e10b7764\u003c/code\u003e\u003c/a\u003e Fix typo in \u003ccode\u003eLen\u003c/code\u003e docstring (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/100\"\u003e#100\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/955f7576d616feb6e9407c74498517787c38afd4\"\u003e\u003ccode\u003e955f757\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop EOL 3.8-3.9 (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/97\"\u003e#97\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/bd280fea7983550d266f993d868b8dd7ff822bf1\"\u003e\u003ccode\u003ebd280fe\u003c/code\u003e\u003c/a\u003e Added Python 3.14 to the test matrix (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/96\"\u003e#96\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/a471bb757663452459893e6f593118ec21eb1b9e\"\u003e\u003ccode\u003ea471bb7\u003c/code\u003e\u003c/a\u003e Add SPDX license expression (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/92\"\u003e#92\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/eab91d9a8c0d3f73661fc4b0794a1fe76c94fa84\"\u003e\u003ccode\u003eeab91d9\u003c/code\u003e\u003c/a\u003e Fix string predicate names in doc (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/90\"\u003e#90\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/03ad9c3c7b4d4dfe9e33c09075a3a2766c0820e1\"\u003e\u003ccode\u003e03ad9c3\u003c/code\u003e\u003c/a\u003e add CI for PyPy3.11 and fix test (issue 71) (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/88\"\u003e#88\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/5ae60437f0ab493cedd27311bc6ce6d2188e8d8b\"\u003e\u003ccode\u003e5ae6043\u003c/code\u003e\u003c/a\u003e fix: typo in README.md (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/87\"\u003e#87\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/b60ad7bff90019c7de3547df1c8e3586eb328423\"\u003e\u003ccode\u003eb60ad7b\u003c/code\u003e\u003c/a\u003e Update license-files to be PEP-639 compliant (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/85\"\u003e#85\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/86\"\u003e#86\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/3fbeb6d129760ae48d7a0372fb9301764acc95ae\"\u003e\u003ccode\u003e3fbeb6d\u003c/code\u003e\u003c/a\u003e Fix docstring of \u003ccode\u003eTimezone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/84\"\u003e#84\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 0.111.0 to 0.119.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.119.0\u003c/h2\u003e\n\u003ch2\u003e0.119.0 (2026-07-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.118.0...v0.119.0\"\u003ev0.118.0...v0.119.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add new stop reason 'model_context_window_exceeded' (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d983cdecdea27fb8ae36fd293930b978c9bebf4f\"\u003ed983cde\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e handle binary files in agent toolset read/edit (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/283\"\u003e#283\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/417b76b9adcb69ee9effa2e9af1536dd08e6764e\"\u003e417b76b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.118.0\u003c/h2\u003e\n\u003ch2\u003e0.118.0 (2026-07-22)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.117.1...v0.118.0\"\u003ev0.117.1...v0.118.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for Managed Agents model effort, initial session events, and threads delta streaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/712bc6f5e07ca7607e13f24fba4eea57c2e73478\"\u003e712bc6f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.117.1\u003c/h2\u003e\n\u003ch2\u003e0.117.1 (2026-07-21)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.117.0...v0.117.1\"\u003ev0.117.0...v0.117.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eaws:\u003c/strong\u003e handle credentials correctly when using AnthropicAWS.copy() (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/85d3881b2e178dd30b30f9ac4c462f20ea88693d\"\u003e85d3881\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for new refusal category (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d1dea0b51164c859de1e05a78468f5be2b6a67de\"\u003ed1dea0b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e docs updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b14f94c231f9adc6bb2ad96eddfc27cc1a4cfea7\"\u003eb14f94c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e bump http-snapshot to 0.1.9 (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/275\"\u003e#275\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/434b65772633f1c0d1899de64d40a67b7cb943fe\"\u003e434b657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e pin httpx_aiohttp major version (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/271\"\u003e#271\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/924487f7c8b3afd69ec382af78326ba224779141\"\u003e924487f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c48db8b6cdd800a98bf57088f530de8fe4dc82e8\"\u003ec48db8b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/755c06cc06161ccdf9b28b77d5e6de58adb462ce\"\u003e755c06c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e codegen related update (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4fbecf6a2b002c8807da2336a75ddef7864f47c\"\u003ea4fbecf\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.117.0\u003c/h2\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003c!-- 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/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.119.0 (2026-07-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.118.0...v0.119.0\"\u003ev0.118.0...v0.119.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add new stop reason 'model_context_window_exceeded' (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d983cdecdea27fb8ae36fd293930b978c9bebf4f\"\u003ed983cde\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e handle binary files in agent toolset read/edit (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/283\"\u003e#283\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/417b76b9adcb69ee9effa2e9af1536dd08e6764e\"\u003e417b76b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.118.0 (2026-07-22)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.117.1...v0.118.0\"\u003ev0.117.1...v0.118.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for Managed Agents model effort, initial session events, and threads delta streaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/712bc6f5e07ca7607e13f24fba4eea57c2e73478\"\u003e712bc6f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.117.1 (2026-07-21)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.117.0...v0.117.1\"\u003ev0.117.0...v0.117.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eaws:\u003c/strong\u003e handle credentials correctly when using AnthropicAWS.copy() (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/85d3881b2e178dd30b30f9ac4c462f20ea88693d\"\u003e85d3881\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for new refusal category (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d1dea0b51164c859de1e05a78468f5be2b6a67de\"\u003ed1dea0b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e docs updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b14f94c231f9adc6bb2ad96eddfc27cc1a4cfea7\"\u003eb14f94c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e bump http-snapshot to 0.1.9 (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/275\"\u003e#275\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/434b65772633f1c0d1899de64d40a67b7cb943fe\"\u003e434b657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e pin httpx_aiohttp major version (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/271\"\u003e#271\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/924487f7c8b3afd69ec382af78326ba224779141\"\u003e924487f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c48db8b6cdd800a98bf57088f530de8fe4dc82e8\"\u003ec48db8b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/755c06cc06161ccdf9b28b77d5e6de58adb462ce\"\u003e755c06c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e codegen related update (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4fbecf6a2b002c8807da2336a75ddef7864f47c\"\u003ea4fbecf\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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/anthropics/anthropic-sdk-python/commit/eb178ecf7b0951226cac47986c520e3dbc658edb\"\u003e\u003ccode\u003eeb178ec\u003c/code\u003e\u003c/a\u003e release: 0.119.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/691471837f19dd4ce50fd96eaf91993a0eb4d72a\"\u003e\u003ccode\u003e6914718\u003c/code\u003e\u003c/a\u003e feat(api): add new stop reason 'model_context_window_exceeded'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d2bad4fc771493d245a7fb182ef6860907ab728f\"\u003e\u003ccode\u003ed2bad4f\u003c/code\u003e\u003c/a\u003e fix(tools): handle binary files in agent toolset read/edit (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/283\"\u003e#283\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b52770843a4c703b3b4e5df7ec36800b62b2fc0b\"\u003e\u003ccode\u003eb527708\u003c/code\u003e\u003c/a\u003e release: 0.118.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f2412fd969cc2800fe9a14535e62899bc1d03494\"\u003e\u003ccode\u003ef2412fd\u003c/code\u003e\u003c/a\u003e feat(api): add support for Managed Agents model effort, initial session event...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d7c0ea24729825da8f817c0da2ebb20ade7a43cc\"\u003e\u003ccode\u003ed7c0ea2\u003c/code\u003e\u003c/a\u003e release: 0.117.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5ebdcb03966baf6a8948b1d74eca0254965414c5\"\u003e\u003ccode\u003e5ebdcb0\u003c/code\u003e\u003c/a\u003e chore(api): add support for new refusal category\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b50f8b1e144d10adf443fab4424f92037897add2\"\u003e\u003ccode\u003eb50f8b1\u003c/code\u003e\u003c/a\u003e chore(deps): bump http-snapshot to 0.1.9 (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/275\"\u003e#275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/dc61d3b11dbb1c0676cc485e7fb91a4b0db8e41e\"\u003e\u003ccode\u003edc61d3b\u003c/code\u003e\u003c/a\u003e chore(internal): codegen related update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/42e2d8613304e0b500c8552b1ed4d9c336a45b7a\"\u003e\u003ccode\u003e42e2d86\u003c/code\u003e\u003c/a\u003e chore(deps): pin httpx_aiohttp major version (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/271\"\u003e#271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.111.0...v0.119.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.0 to 4.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged \u003ccode\u003eByteReceiveStream.receive()\u003c/code\u003e implementations to raise a \u003ccode\u003eValueError\u003c/code\u003e when \u003ccode\u003emax_bytes\u003c/code\u003e is not a positive integer (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1191\"\u003e#1191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting \u003ccode\u003efloat(\u0026quot;inf\u0026quot;)\u003c/code\u003e when the limiter was instantiated outside of an event loop. The adapter setter checked for infinity by identity (\u003ccode\u003evalue is math.inf\u003c/code\u003e), so only the exact \u003ccode\u003emath.inf\u003c/code\u003e singleton was accepted, while every backend setter (using \u003ccode\u003emath.isinf()\u003c/code\u003e) accepts any positive infinity (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1189\"\u003e#1189\u003c/a\u003e; PR by \u003ca href=\"https://github.com/greymoth-jp\"\u003e\u003ccode\u003e@​greymoth-jp\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eto_process.run_sync()\u003c/code\u003e deadlocking when the worker function writes enough data to \u003ccode\u003esys.stderr\u003c/code\u003e to fill the (undrained) pipe buffer. The worker process now redirects \u003ccode\u003esys.stderr\u003c/code\u003e to \u003ccode\u003eos.devnull\u003c/code\u003e as well, matching the documented behavior\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eTLSStream.wrap()\u003c/code\u003e matching an internationalized (unicode) host name against the peer certificate using IDNA 2003 (via the standard library) instead of IDNA 2008, which could cause the host name to be matched against the wrong certificate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.open_process()\u003c/code\u003e (and \u003ccode\u003erun_process()\u003c/code\u003e) ignoring the \u003ccode\u003eextra_groups\u003c/code\u003e argument, as it mistakenly passed the value of the \u003ccode\u003egroup\u003c/code\u003e argument instead (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1209\"\u003e#1209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.acquire_nowait()\u003c/code\u003e and \u003ccode\u003eCapacityLimiter.acquire_nowait_on_behalf_of()\u003c/code\u003e raising \u003ccode\u003etrio.WouldBlock\u003c/code\u003e instead of \u003ccode\u003eanyio.WouldBlock\u003c/code\u003e on the \u003ccode\u003etrio\u003c/code\u003e backend when there are no tokens available (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens (\u003ccode\u003eborrowed_tokens\u003c/code\u003e exceeding \u003ccode\u003etotal_tokens\u003c/code\u003e and \u003ccode\u003eavailable_tokens\u003c/code\u003e going negative) when a non-blocking acquire was made in the window between a token being released and the notified waiter resuming. The freed token is now reserved for the woken waiter right away, so the non-blocking acquire correctly raises \u003ccode\u003eWouldBlock\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1170\"\u003e#1170\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed unnecessary CPU spin when delivering cancellation from \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio under certain conditions, including improper cancel scope nesting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1111\"\u003e#1111\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\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/c384f99687c64c59ed8a11c3a0f11a2d57daff71\"\u003e\u003ccode\u003ec384f99\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/dbba29d1ade7936f18fb71ba24aa92978673482a\"\u003e\u003ccode\u003edbba29d\u003c/code\u003e\u003c/a\u003e Fixed 100% CPU spin on cancel scope misuse (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1217\"\u003e#1217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6bbc6c33caabc13af5bc4256f745027cf8d5d7b8\"\u003e\u003ccode\u003e6bbc6c3\u003c/code\u003e\u003c/a\u003e Fix CapacityLimiter over-granting tokens on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f82b2537cbbe98f3df3f295499056ab7de0b15b\"\u003e\u003ccode\u003e6f82b25\u003c/code\u003e\u003c/a\u003e Refactored TestTLSStream.test_receive_invalid_max_bytes() to be less flaky\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/be24b0414f67f604bcbdd5ea3bcc56ab920d872e\"\u003e\u003ccode\u003ebe24b04\u003c/code\u003e\u003c/a\u003e Relaxed timeouts to fix test flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/81135065749b4f60c06619b9caaf0a11871c1ddf\"\u003e\u003ccode\u003e8113506\u003c/code\u003e\u003c/a\u003e Fix test flakiness caused by slow callback duration logging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1e988b617b69588e33fecb75e36a9837245f562f\"\u003e\u003ccode\u003e1e988b6\u003c/code\u003e\u003c/a\u003e Fixed CapacityLimiter raising trio.WouldBlock instead of anyio.WouldBlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44713f345cd29dd4e7d76553c134543a1296cc62\"\u003e\u003ccode\u003e44713f3\u003c/code\u003e\u003c/a\u003e Pin setup-uv to a commit sha across downstream jobs (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f1b7301c8264b0d2e8d24a5788fd29e93dea4040\"\u003e\u003ccode\u003ef1b7301\u003c/code\u003e\u003c/a\u003e Fixed stderr writes in a worker subprocess causing a deadlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1207\"\u003e#1207\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/212be93c2cf2c841e753e95e5e2c543ee7feca90\"\u003e\u003ccode\u003e212be93\u003c/code\u003e\u003c/a\u003e Fix flaky test_tcp_listener_same_port using a hardcoded port (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1206\"\u003e#1206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.0...4.14.2\"\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.33 to 1.43.55\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2a09bb61f3d89224a4d9ceea1ac25320052d8592\"\u003e\u003ccode\u003e2a09bb6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.55'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/ffe76ba3d1fd3c8b65d4622325f64ac9c744084a\"\u003e\u003ccode\u003effe76ba\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.55\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/74d20c986a904773fe1b29e0773c9ba7e9c9582c\"\u003e\u003ccode\u003e74d20c9\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/c073381321bd3816f1af247b7e914b306597d939\"\u003e\u003ccode\u003ec073381\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.54'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5e554e5a627172ba5ea27e04991ea03d62b293f2\"\u003e\u003ccode\u003e5e554e5\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.54' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2ad1683fd0c19f995e073ab4ebc1c4b1c465eb90\"\u003e\u003ccode\u003e2ad1683\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.54\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c613376945fa5c42bd2fbf266a17355863d929b2\"\u003e\u003ccode\u003ec613376\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/a939926a123d97bd842ffc6ec4a0affc35bf3d42\"\u003e\u003ccode\u003ea939926\u003c/code\u003e\u003c/a\u003e Bump zizmorcore/zizmor-action in the github-actions group (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4819\"\u003e#4819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b6042c3698a7d62da6159077fcbe984c0b02902d\"\u003e\u003ccode\u003eb6042c3\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/boto3/issues/4820\"\u003e#4820\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d554104c35b28db00b8da474dc4d56a0703da31d\"\u003e\u003ccode\u003ed554104\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.53'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.33...1.43.55\"\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.33 to 1.43.55\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/b71d5637f58df4bc61953b80902b3c040c7af889\"\u003e\u003ccode\u003eb71d563\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.55'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/f4ac9cdcf071f9c8935be0f09fcc520c93257a16\"\u003e\u003ccode\u003ef4ac9cd\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.55\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/0c5445a7bf2a658d68a9bfb979bec422630f5a28\"\u003e\u003ccode\u003e0c5445a\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c823f70df3d47062845d8c8d84497e5c62da35df\"\u003e\u003ccode\u003ec823f70\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/3758\"\u003e#3758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/cda624e08b0b67339dd41f76c7afb4bfff235fe6\"\u003e\u003ccode\u003ecda624e\u003c/code\u003e\u003c/a\u003e Bump zizmorcore/zizmor-action in the github-actions group (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3757\"\u003e#3757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/02b0742be1faccdedbb305babb66aac1f33e95b3\"\u003e\u003ccode\u003e02b0742\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.54'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e33fd6696f3646f3da10684326bd6c79fb9474a1\"\u003e\u003ccode\u003ee33fd66\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.54' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/6ed607008ed9bcfbe7a9e49a586c16d210f18568\"\u003e\u003ccode\u003e6ed6070\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.54\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/770567f78fceecb4e20d777d1de8a0b4913d2316\"\u003e\u003ccode\u003e770567f\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/3c05720178c4c85ffc8f61ea6298b8a9f675d45c\"\u003e\u003ccode\u003e3c05720\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.33...1.43.55\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.6.17 to 2026.7.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/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.06.17...2026.07.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.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 `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 `filelock` from 3.29.4 to 3.32.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.32.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e👷 ci: add Python 3.15 to the test matrix 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/683\"\u003etox-dev/filelock#683\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(packaging): let an unpacked sdist run the test suite 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/685\"\u003etox-dev/filelock#685\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.31.2...3.32.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.31.2...3.32.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.31.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(strict): tolerate an errno without ENOTSUP 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/681\"\u003etox-dev/filelock#681\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.31.1...3.31.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.31.1...3.31.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.31.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ refactor(coverage): key exclusions on probed capability 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/679\"\u003etox-dev/filelock#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003escope a lease's claim to the context that acquired it 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/680\"\u003etox-dev/filelock#680\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.31.0...3.31.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.31.0...3.31.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.31.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(platform): support Termux/Android by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/678\"\u003etox-dev/filelock#678\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/673\"\u003etox-dev/filelock#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs(mermaid): follow the light and dark theme toggle by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/674\"\u003etox-dev/filelock#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003easyncio: scope the reentrant-deadlock registry to the owning task by \u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.0 (2026-07-21)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSoftReadWriteLock\u003c/code\u003e closes the directory handle it opens to scan for readers as soon as a scan stops early, rather\nthan holding it until the generator is collected. :pr:\u003ccode\u003e685\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeclare support for Python 3.15 and run the test suite against it and its free-threaded build, both currently in beta. :pr:\u003ccode\u003e683\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe source distribution ships the capability probes the tests import, and reading one no longer needs \u003ccode\u003ecoverage\u003c/code\u003e\ninstalled, so the suite runs from an unpacked sdist instead of failing on a missing \u003ccode\u003ecoverage_pragmas\u003c/code\u003e. :pr:\u003ccode\u003e685\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.2 (2026-07-21)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efilelock\u003c/code\u003e imports again on runtimes whose \u003ccode\u003eerrno\u003c/code\u003e omits \u003ccode\u003eENOTSUP\u003c/code\u003e, such as GraalPy, where importing the package\nraised \u003ccode\u003eImportError\u003c/code\u003e. It probes the code instead, preferring \u003ccode\u003eENOTSUP\u003c/code\u003e, falling back to \u003ccode\u003eEOPNOTSUPP\u003c/code\u003e where that\nname is absent, and dropping to \u003ccode\u003eENOSYS\u003c/code\u003e/\u003ccode\u003eEXDEV\u003c/code\u003e where neither exists. Platforms defining \u003ccode\u003eENOTSUP\u003c/code\u003e keep their\nbehavior. :pr:\u003ccode\u003e681\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.1 (2026-07-20)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eA \u003ccode\u003eSoftFileLease\u003c/code\u003e acquired on one thread keeps its claim when another thread fails to acquire the same lease object,\nso its heartbeat carries on refreshing the marker instead of being torn down and letting a peer take the live claim. :pr:\u003ccode\u003e680\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.0 (2026-07-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Termux/Android, whose CPython ships without \u003ccode\u003eos.link\u003c/code\u003e and reports \u003ccode\u003esys.platform == \u0026quot;android\u0026quot;\u003c/code\u003e. \u003ccode\u003eimport filelock\u003c/code\u003e and both \u003ccode\u003eFileLock\u003c/code\u003e and \u003ccode\u003eSoftFileLock\u003c/code\u003e now work there, \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e reports its missing\nhard-link support only when acquired, and process liveness reads \u003ccode\u003e/proc\u003c/code\u003e on Android instead of PID-only checks. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e no longer lets two processes hold the lock at once under heavy contention. A holder now keeps\nits intent claim for the whole hold, so a contender whose directory scan races the holder's freshly linked claim can no\nlonger miss it and win alongside it. A held lock now exposes both an \u003ccode\u003eintent\u003c/code\u003e and a \u003ccode\u003eheld\u003c/code\u003e claim. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.3 (2026-07-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eAsyncFileLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLock\u003c/code\u003e no longer raise a deadlock \u003ccode\u003eRuntimeError\u003c/code\u003e when a different asyncio task\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/76525e6e5ca0fded86809d82096083c6c11b8b16\"\u003e\u003ccode\u003e76525e6\u003c/code\u003e\u003c/a\u003e Release 3.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9824d15e01898b46231c174e06788b7469959079\"\u003e\u003ccode\u003e9824d15\u003c/code\u003e\u003c/a\u003e 🐛 fix(packaging): let an unpacked sdist run the test suite (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f6c41e9f467dd8483b05e1f9b04f0b0129d07fbe\"\u003e\u003ccode\u003ef6c41e9\u003c/code\u003e\u003c/a\u003e 👷 ci: add Python 3.15 to the test matrix (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/683\"\u003e#683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/caeb1c92f5eef9068ba8ed55cd2fb033a855ffe5\"\u003e\u003ccode\u003ecaeb1c9\u003c/code\u003e\u003c/a\u003e Release 3.31.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/60eda0f9ec8b4b7efdcb429102ea8b3e7f9f9518\"\u003e\u003ccode\u003e60eda0f\u003c/code\u003e\u003c/a\u003e 🐛 fix(strict): tolerate an errno without ENOTSUP (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/681\"\u003e#681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/c1b2e6fdbb8f2307e06dbc1543314194e3250139\"\u003e\u003ccode\u003ec1b2e6f\u003c/code\u003e\u003c/a\u003e Release 3.31.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9fd7de55e1109fee751173ad3842cf909349ce9f\"\u003e\u003ccode\u003e9fd7de5\u003c/code\u003e\u003c/a\u003e scope a lease's claim to the context that acquired it (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/2b3ad2c561889f340975bc62a48969e1fb4109d6\"\u003e\u003ccode\u003e2b3ad2c\u003c/code\u003e\u003c/a\u003e ♻️ refactor(coverage): key exclusions on probed capability (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/679\"\u003e#679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3b66fdc1432e3b02e83525e61a99096aa09a933f\"\u003e\u003ccode\u003e3b66fdc\u003c/code\u003e\u003c/a\u003e Release 3.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/166b2b5d723a2e111be36a8b43e594a97141c0fd\"\u003e\u003ccode\u003e166b2b5\u003c/code\u003e\u003c/a\u003e ✨ feat(platform): support Termux/Android (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/678\"\u003e#678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.4...3.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hf-xet` from 1.5.1 to 1.5.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/xet-core/releases\"\u003ehf-xet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[hf-xet v1.5.2] Fix HTTP Request Retry\u003c/h2\u003e\n\u003ch2\u003eProblems addressed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis release fixes a bug in HTTP request retry configuration that could cause apparent hangs under poor network conditions when a request was retried more than twice. Related PR: \u003ca href=\"https://redirect.github.com/huggingface/xet-core/pull/893\"\u003ehuggingface/xet-core#893\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/kszucs\"\u003e\u003ccode\u003e@​kszucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/huggingface/xet-core/pull/872\"\u003ehuggingface/xet-core#872\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/huggingface/xet-core/compare/v1.5.1...v1.5.2\"\u003ehttps://github.com/huggingface/xet-core/compare/v1.5.1...v1.5.2\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/huggingface/xet-core/commit/cb96dfe14f3208203bd5ffb791771f4fd4c41f2e\"\u003e\u003ccode\u003ecb96dfe\u003c/code\u003e\u003c/a\u003e Bump hf-xet to 1.5.2 (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/902\"\u003e#902\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/fc6cbec1828c472b57f4555818e14aa69ff10b9e\"\u003e\u003ccode\u003efc6cbec\u003c/code\u003e\u003c/a\u003e Fix retry strategy configuration (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/553480bdbb0a2d1d749adc877240d9813f3b0205\"\u003e\u003ccode\u003e553480b\u003c/code\u003e\u003c/a\u003e Update xtool to add GC simulation functionality  (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/759\"\u003e#759\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/f8598c231e863f0a647586d033ea03cfa2a25e46\"\u003e\u003ccode\u003ef8598c2\u003c/code\u003e\u003c/a\u003e chore: bump crate versions to 1.5.3 (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/890\"\u003e#890\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/0e4740050f3dc26c263ca3d170c179c78ce16f55\"\u003e\u003ccode\u003e0e47400\u003c/code\u003e\u003c/a\u003e fix(client): call versioned /v1/shards endpoint for shard uploads (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/879\"\u003e#879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/9d4e182872fe0d0cd9c8382035655628b01b10f7\"\u003e\u003ccode\u003e9d4e182\u003c/code\u003e\u003c/a\u003e feat: add lifecycle-tag deletion mode to simulation clients (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/882\"\u003e#882\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/bebdf4b5aaad56318cfb9999f80e75760da59a5e\"\u003e\u003ccode\u003ebebdf4b\u003c/code\u003e\u003c/a\u003e feat: gate internal-only dependencies behind an \u003ccode\u003einternal-tools\u003c/code\u003e feature (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/872\"\u003e#872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/f408d7f4b59fe1559d20c2e8ee4a2d61476d0c8f\"\u003e\u003ccode\u003ef408d7f\u003c/code\u003e\u003c/a\u003e Drop hf-xet Python release for Python 3.13t (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/877\"\u003e#877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/8680670fe0c56fc562ce4f3d7eecee89d2bcc9b9\"\u003e\u003ccode\u003e8680670\u003c/code\u003e\u003c/a\u003e feat(wasm): make hf-xet compile for wasm32-unknown-unknown (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/841\"\u003e#841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/a79cd63650406242976eac004f034c52f9bd6eac\"\u003e\u003ccode\u003ea79cd63\u003c/code\u003e\u003c/a\u003e build: bump pyo3 0.26 → 0.29 (fix RUSTSEC-2026-0176/0177) (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/876\"\u003e#876\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/huggingface/xet-core/compare/v1.5.1...v1.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `html5tagger` from 1.3.0 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sanic-org/html5tagger/releases\"\u003ehtml5tagger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBREAKING: Templating redux by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/13\"\u003esanic-org/html5tagger#13\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBenchmark against Jinja by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/16\"\u003esanic-org/html5tagger#16\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003edoc[bool]\u003c/code\u003e conditional no-op toggle for \u003ccode\u003ewith\u003c/code\u003e statements by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/15\"\u003esanic-org/html5tagger#15\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sanic-org/html5tagger/compare/v1.4.0...v2.0.0\"\u003ehttps://github.com/sanic-org/html5tagger/compare/v1.4.0...v2.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eModernise package by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/12\"\u003esanic-org/html5tagger#12\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake doc.script and doc.style work as expected. by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/14\"\u003esanic-org/html5tagger#14\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd [CSS selector] id/class/attribute setting and (classes=...) for appending to class by \u003ca href=\"https://github.com/ahopkins\"\u003e\u003ccode\u003e@​ahopkins\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/9\"\u003esanic-org/html5tagger#9\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe templating support introduced in v1.3 is deprecated and will be removed in v2.0 for a redesigned system\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sanic-org/html5tagger/compare/v1.3.0...v1.4.0\"\u003ehttps://github.com/sanic-org/html5tagger/compare/v1.3.0...v1.4.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/sanic-org/html5tagger/commit/e3e0c044784d7409fcc823dde1bd83d531b4c288\"\u003e\u003ccode\u003ee3e0c04\u003c/code\u003e\u003c/a\u003e README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/728b0d7906aa4b7fcdf0602c5810126a234ed404\"\u003e\u003ccode\u003e728b0d7\u003c/code\u003e\u003c/a\u003e Benchmark against Jinja (\u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/issues/16\"\u003e#16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/fc1eca708772e25e42cfa59fc18c966e06c8407a\"\u003e\u003ccode\u003efc1eca7\u003c/code\u003e\u003c/a\u003e README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/37dbb47a06d48cbd6a91d282b23b8d929e41ff50\"\u003e\u003ccode\u003e37dbb47\u003c/code\u003e\u003c/a\u003e Update test and coverage badges [skip ci]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/38c19e9caacf31ba33d7ea42a282078f676aee36\"\u003e\u003ccode\u003e38c19e9\u003c/code\u003e\u003c/a\u003e Add tests and coverage badges.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/f68bd517fc8eeea558f3d91898ea44e68757f5d5\"\u003e\u003ccode\u003ef68bd51\u003c/code\u003e\u003c/a\u003e Test added for missing coverage.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/1109d28debb9b3a829a62832334a0e609e57bc4c\"\u003e\u003ccode\u003e1109d28\u003c/code\u003e\u003c/a\u003e Additional typing, tested compatible with mypy and ty.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/bc6058ee847b4742e1fbb404f48108bbf8465895\"\u003e\u003ccode\u003ebc6058e\u003c/code\u003e\u003c/a\u003e Cleanup README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/209a43eac1823eea0fb748647417ad90f0ca5b6a\"\u003e\u003ccode\u003e209a43e\u003c/code\u003e\u003c/a\u003e Cleanup README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/6d2e88d376ad5387f387f713324ec081d851d86d\"\u003e\u003ccode\u003e6d2e88d\u003c/code\u003e\u003c/a\u003e Templating redux (\u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/issues/13\"\u003e#13\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sanic-org/html5tagger/compare/v1.3.0...v2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `huggingface-hub` from 1.20.1 to 1.24.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.c...\n\n_Description has been truncated_","html_url":"https://github.com/Watts-Lab/atlas/pull/256","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Watts-Lab%2Fatlas/issues/256","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/256/packages"},{"uuid":"4926034338","node_id":"PR_kwDOTHoTgc7zsgH6","number":52,"state":"open","title":"build(deps): bump the python-minor-patch group across 1 directory with 22 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-20T05:22:39.000Z","updated_at":"2026-07-20T05:22:40.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-minor-patch","update_count":22,"packages":[{"name":"fastapi","old_version":"0.139.0","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.50.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"hatchet-sdk","old_version":"1.33.15","new_version":"1.35.0"},{"name":"anthropic","old_version":"0.116.0","new_version":"0.117.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"openai","old_version":"2.44.0","new_version":"2.46.0","repository_url":"https://github.com/openai/openai-python"},{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"anyio","old_version":"4.14.1","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"grpcio","old_version":"1.81.1","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"grpcio-tools","old_version":"1.81.1","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"joserfc","old_version":"1.7.2","new_version":"1.7.4","repository_url":"https://github.com/authlib/joserfc"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"yarl","old_version":"1.24.2","new_version":"1.24.5","repository_url":"https://github.com/aio-libs/yarl"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.7","new_version":"3.31.1","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"platformdirs","old_version":"4.10.0","new_version":"4.10.1","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pypdf","old_version":"6.13.3","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"browser-use","old_version":"0.13.3","new_version":"0.13.6","repository_url":"https://github.com/browser-use/browser-use"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 22 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.139.0` | `0.139.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.50.0` | `0.51.0` |\n| hatchet-sdk | `1.33.15` | `1.35.0` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.116.0` | `0.117.0` |\n| [openai](https://github.com/openai/openai-python) | `2.44.0` | `2.46.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.15.22` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.1` | `4.14.2` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.1` | `1.82.1` |\n| [grpcio-tools](https://github.com/grpc/grpc) | `1.81.1` | `1.82.1` |\n| [joserfc](https://github.com/authlib/joserfc) | `1.7.2` | `1.7.4` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.69.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n| [yarl](https://github.com/aio-libs/yarl) | `1.24.2` | `1.24.5` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.7` | `3.31.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.10.1` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.3` | `6.14.2` |\n| [browser-use](https://github.com/browser-use/browser-use) | `0.13.3` | `0.13.6` |\n\n\nUpdates `fastapi` from 0.139.0 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.139.0...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.50.0 to 0.51.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansio implementation by \u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.1 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3019\"\u003e#3019\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e4d0b05eb8c6459b7ba27ad13a2c2f4f8d4ece50\"\u003e\u003ccode\u003ee4d0b05\u003c/code\u003e\u003c/a\u003e Version 0.51.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3028\"\u003e#3028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/944e43ddbf715aea7c587f2738cd94c3f9106110\"\u003e\u003ccode\u003e944e43d\u003c/code\u003e\u003c/a\u003e Remove colorama from the standard extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2e787704f2610133059e76d56bbd60f48edd34a3\"\u003e\u003ccode\u003e2e78770\u003c/code\u003e\u003c/a\u003e Restart workers with overlap on SIGHUP for near-zero-downtime reloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a1b570cf577d512bfd396b64d72313233e9c3325\"\u003e\u003ccode\u003ea1b570c\u003c/code\u003e\u003c/a\u003e Version 0.50.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3022\"\u003e#3022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/83c7da7332ac3100171c258071de40d5dde35e13\"\u003e\u003ccode\u003e83c7da7\u003c/code\u003e\u003c/a\u003e Require websockets\u0026gt;=13.0 for the default sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b4d011668a75d02370353f34de6dea59692dcad2\"\u003e\u003ccode\u003eb4d0116\u003c/code\u003e\u003c/a\u003e Version 0.50.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a9151d0e763df2c56da2bfe8c5dcead4fe5a276\"\u003e\u003ccode\u003e2a9151d\u003c/code\u003e\u003c/a\u003e Split comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1bf3ab42e3aba1cf4acd1ef0c29d8ad9a599d333\"\u003e\u003ccode\u003e1bf3ab4\u003c/code\u003e\u003c/a\u003e Cover the excluded-directory branch in \u003ccode\u003eFileFilter\u003c/code\u003e with a direct test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/837b5f960dbe2f03e9f12feb9955ce2217211ad8\"\u003e\u003ccode\u003e837b5f9\u003c/code\u003e\u003c/a\u003e Deflake multiprocess, reload, and signal supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2975\"\u003e#2975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.51.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hatchet-sdk` from 1.33.15 to 1.35.0\n\nUpdates `anthropic` from 0.116.0 to 0.117.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.117.0\u003c/h2\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ecredentials:\u003c/strong\u003e keep credential material out of traceback frame locals via SecretStr (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/aa93a4dbf383f7fdab1404c136e86d4679d644c1\"\u003eaa93a4d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates to field descriptions (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/75d8dcc0ac8cb381fa327a61a9ac84022b3a1677\"\u003e75d8dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model example (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a57e30ac1bafb54387bf631be2081bfdb3782911\"\u003ea57e30a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e updates to descriptions and examples (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e1535b6919441448dddf00e2636cb8c60a721a43\"\u003ee1535b6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ecredentials:\u003c/strong\u003e keep credential material out of traceback frame locals via SecretStr (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/aa93a4dbf383f7fdab1404c136e86d4679d644c1\"\u003eaa93a4d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates to field descriptions (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/75d8dcc0ac8cb381fa327a61a9ac84022b3a1677\"\u003e75d8dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model example (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a57e30ac1bafb54387bf631be2081bfdb3782911\"\u003ea57e30a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e updates to descriptions and examples (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e1535b6919441448dddf00e2636cb8c60a721a43\"\u003ee1535b6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3c8bdf14bc55377262f11d6c34b893834a02b3fc\"\u003e\u003ccode\u003e3c8bdf1\u003c/code\u003e\u003c/a\u003e release: 0.117.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/db820820aba78e8af45d0a02afc3948006ab6021\"\u003e\u003ccode\u003edb82082\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/bc2f6e4a7a53ac362d3dce04d2d7cf044403bf81\"\u003e\u003ccode\u003ebc2f6e4\u003c/code\u003e\u003c/a\u003e feat(api): add support for MCP Tunnels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3541444ba348e95162081f1a45877478a7d90fa7\"\u003e\u003ccode\u003e3541444\u003c/code\u003e\u003c/a\u003e test(beta): cover parse() header merging with caller extra_headers (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/824de14e5be54d4fe268d52ed8fd3c00cb909be2\"\u003e\u003ccode\u003e824de14\u003c/code\u003e\u003c/a\u003e feat(api): add support for dreaming\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/26ce65ac3f7530e092a56f5557b4ed703d592964\"\u003e\u003ccode\u003e26ce65a\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/6d9ee332c38335cb1d1d5d2669d57b351b917770\"\u003e\u003ccode\u003e6d9ee33\u003c/code\u003e\u003c/a\u003e chore(docs): update model example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c7ee42192bcbfbd7659777dd6ba5efa7be8407fb\"\u003e\u003ccode\u003ec7ee421\u003c/code\u003e\u003c/a\u003e Block ask-gated session tool calls until user confirmation (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/16\"\u003e#16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/97b130e6f0b695a961795211d9a7458af9455fb2\"\u003e\u003ccode\u003e97b130e\u003c/code\u003e\u003c/a\u003e chore(docs): updates to descriptions and examples\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fb1e755153df78b8b5691b3e42380b7409144536\"\u003e\u003ccode\u003efb1e755\u003c/code\u003e\u003c/a\u003e fix(credentials): keep credential material out of traceback frame locals via ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.44.0 to 2.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.46.0\u003c/h2\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys\u0026quot; endpoint (\u003ca href=\"https://github.com/openai/openai-python/commit/5a0094194eac9c605c8ca84d47d1c5518f8e2131\"\u003e5a00941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add owner_project_access to APIKeyListParams (\u003ca href=\"https://github.com/openai/openai-python/commit/f589d04bf9f377ecb1f54335ab3ab9d825b5dfee\"\u003ef589d04\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/980f176e83ee5d991bf9e8e4def80d9905ade5ec\"\u003e980f176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/2eae984315580cdbf9ceb14d6cb568c581baa768\"\u003e2eae984\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e preserve generated type compatibility (\u003ca href=\"https://github.com/openai/openai-python/commit/00bd72adbe03f4b5c4b89d91b8d317f11b58bbdf\"\u003e00bd72a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove beta annotation compatibility aliases (\u003ca href=\"https://github.com/openai/openai-python/commit/99dbd15ff3ad1628b94a729a6b688212d4655908\"\u003e99dbd15\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.45.0\u003c/h2\u003e\n\u003ch2\u003e2.45.0 (2026-07-09)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.45.0\"\u003ev2.44.0...v2.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e gpt-5.6-sol updates (\u003ca href=\"https://github.com/openai/openai-python/commit/039d1feb264a2dca7195ba5028e9fb47a5e04987\"\u003e039d1fe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore beta resource accessors (\u003ca href=\"https://github.com/openai/openai-python/commit/2dfc130b8f0fdb0049e075aac21aaef29482b4e3\"\u003e2dfc130\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/7b61351b014bb6ca4623ff6cce7f32f45038a92e\"\u003e7b61351\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys\u0026quot; endpoint (\u003ca href=\"https://github.com/openai/openai-python/commit/5a0094194eac9c605c8ca84d47d1c5518f8e2131\"\u003e5a00941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add owner_project_access to APIKeyListParams (\u003ca href=\"https://github.com/openai/openai-python/commit/f589d04bf9f377ecb1f54335ab3ab9d825b5dfee\"\u003ef589d04\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/980f176e83ee5d991bf9e8e4def80d9905ade5ec\"\u003e980f176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/2eae984315580cdbf9ceb14d6cb568c581baa768\"\u003e2eae984\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e preserve generated type compatibility (\u003ca href=\"https://github.com/openai/openai-python/commit/00bd72adbe03f4b5c4b89d91b8d317f11b58bbdf\"\u003e00bd72a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove beta annotation compatibility aliases (\u003ca href=\"https://github.com/openai/openai-python/commit/99dbd15ff3ad1628b94a729a6b688212d4655908\"\u003e99dbd15\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.45.0 (2026-07-09)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.45.0\"\u003ev2.44.0...v2.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e gpt-5.6-sol updates (\u003ca href=\"https://github.com/openai/openai-python/commit/039d1feb264a2dca7195ba5028e9fb47a5e04987\"\u003e039d1fe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore beta resource accessors (\u003ca href=\"https://github.com/openai/openai-python/commit/2dfc130b8f0fdb0049e075aac21aaef29482b4e3\"\u003e2dfc130\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/7b61351b014bb6ca4623ff6cce7f32f45038a92e\"\u003e7b61351\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/0e6adb15adc1e74087bcb402de7a75e4fbc0aecb\"\u003e\u003ccode\u003e0e6adb1\u003c/code\u003e\u003c/a\u003e release: 2.46.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3501\"\u003e#3501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f16fbbd2bd25dc1ff150b5f78dbd15ff6bab6d91\"\u003e\u003ccode\u003ef16fbbd\u003c/code\u003e\u003c/a\u003e release: 2.45.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3478\"\u003e#3478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch3\u003ePackaging changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer provide mypyc-accelerated wheels for macOS x86_64 [mypyc-wheels \u003ca href=\"https://redirect.github.com/python/mypy/issues/119\"\u003e#119\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/mypyc/mypy_mypyc-wheels/pull/119\"\u003emypyc/mypy_mypyc-wheels#119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.1 to 4.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged \u003ccode\u003eByteReceiveStream.receive()\u003c/code\u003e implementations to raise a \u003ccode\u003eValueError\u003c/code\u003e when \u003ccode\u003emax_bytes\u003c/code\u003e is not a positive integer (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1191\"\u003e#1191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting \u003ccode\u003efloat(\u0026quot;inf\u0026quot;)\u003c/code\u003e when the limiter was instantiated outside of an event loop. The adapter setter checked for infinity by identity (\u003ccode\u003evalue is math.inf\u003c/code\u003e), so only the exact \u003ccode\u003emath.inf\u003c/code\u003e singleton was accepted, while every backend setter (using \u003ccode\u003emath.isinf()\u003c/code\u003e) accepts any positive infinity (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1189\"\u003e#1189\u003c/a\u003e; PR by \u003ca href=\"https://github.com/greymoth-jp\"\u003e\u003ccode\u003e@​greymoth-jp\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eto_process.run_sync()\u003c/code\u003e deadlocking when the worker function writes enough data to \u003ccode\u003esys.stderr\u003c/code\u003e to fill the (undrained) pipe buffer. The worker process now redirects \u003ccode\u003esys.stderr\u003c/code\u003e to \u003ccode\u003eos.devnull\u003c/code\u003e as well, matching the documented behavior\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eTLSStream.wrap()\u003c/code\u003e matching an internationalized (unicode) host name against the peer certificate using IDNA 2003 (via the standard library) instead of IDNA 2008, which could cause the host name to be matched against the wrong certificate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.open_process()\u003c/code\u003e (and \u003ccode\u003erun_process()\u003c/code\u003e) ignoring the \u003ccode\u003eextra_groups\u003c/code\u003e argument, as it mistakenly passed the value of the \u003ccode\u003egroup\u003c/code\u003e argument instead (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1209\"\u003e#1209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.acquire_nowait()\u003c/code\u003e and \u003ccode\u003eCapacityLimiter.acquire_nowait_on_behalf_of()\u003c/code\u003e raising \u003ccode\u003etrio.WouldBlock\u003c/code\u003e instead of \u003ccode\u003eanyio.WouldBlock\u003c/code\u003e on the \u003ccode\u003etrio\u003c/code\u003e backend when there are no tokens available (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens (\u003ccode\u003eborrowed_tokens\u003c/code\u003e exceeding \u003ccode\u003etotal_tokens\u003c/code\u003e and \u003ccode\u003eavailable_tokens\u003c/code\u003e going negative) when a non-blocking acquire was made in the window between a token being released and the notified waiter resuming. The freed token is now reserved for the woken waiter right away, so the non-blocking acquire correctly raises \u003ccode\u003eWouldBlock\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1170\"\u003e#1170\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed unnecessary CPU spin when delivering cancellation from \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio under certain conditions, including improper cancel scope nesting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1111\"\u003e#1111\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/c384f99687c64c59ed8a11c3a0f11a2d57daff71\"\u003e\u003ccode\u003ec384f99\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/dbba29d1ade7936f18fb71ba24aa92978673482a\"\u003e\u003ccode\u003edbba29d\u003c/code\u003e\u003c/a\u003e Fixed 100% CPU spin on cancel scope misuse (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1217\"\u003e#1217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6bbc6c33caabc13af5bc4256f745027cf8d5d7b8\"\u003e\u003ccode\u003e6bbc6c3\u003c/code\u003e\u003c/a\u003e Fix CapacityLimiter over-granting tokens on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f82b2537cbbe98f3df3f295499056ab7de0b15b\"\u003e\u003ccode\u003e6f82b25\u003c/code\u003e\u003c/a\u003e Refactored TestTLSStream.test_receive_invalid_max_bytes() to be less flaky\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/be24b0414f67f604bcbdd5ea3bcc56ab920d872e\"\u003e\u003ccode\u003ebe24b04\u003c/code\u003e\u003c/a\u003e Relaxed timeouts to fix test flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/81135065749b4f60c06619b9caaf0a11871c1ddf\"\u003e\u003ccode\u003e8113506\u003c/code\u003e\u003c/a\u003e Fix test flakiness caused by slow callback duration logging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1e988b617b69588e33fecb75e36a9837245f562f\"\u003e\u003ccode\u003e1e988b6\u003c/code\u003e\u003c/a\u003e Fixed CapacityLimiter raising trio.WouldBlock instead of anyio.WouldBlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44713f345cd29dd4e7d76553c134543a1296cc62\"\u003e\u003ccode\u003e44713f3\u003c/code\u003e\u003c/a\u003e Pin setup-uv to a commit sha across downstream jobs (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f1b7301c8264b0d2e8d24a5788fd29e93dea4040\"\u003e\u003ccode\u003ef1b7301\u003c/code\u003e\u003c/a\u003e Fixed stderr writes in a worker subprocess causing a deadlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1207\"\u003e#1207\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/212be93c2cf2c841e753e95e5e2c543ee7feca90\"\u003e\u003ccode\u003e212be93\u003c/code\u003e\u003c/a\u003e Fix flaky test_tcp_listener_same_port using a hardcoded port (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1206\"\u003e#1206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.1...4.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.3 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.1/\"\u003ehttps://pypi.org/project/click/8.4.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-1\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-1\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/32\"\u003ehttps://github.com/pallets/click/milestone/32\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type conversion again. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3458\"\u003e#3458\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3277\"\u003e#3277\u003c/a\u003e # 3466\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion result. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3015\"\u003e#3015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3487\"\u003e#3487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our [Version Support Policy][version] on our website.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.1\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type\nconversion again. {issue}\u003ccode\u003e3458\u003c/code\u003e {pr}\u003ccode\u003e3484\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. {issue}\u003ccode\u003e3277\u003c/code\u003e {pr}\u003ccode\u003e3466\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eEnum\u003c/code\u003e values used as \u003ccode\u003eChoice\u003c/code\u003e options produces a\nvalid completion result. {issue}\u003ccode\u003e3015\u003c/code\u003e {pr}\u003ccode\u003e3471\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. {issue}\u003ccode\u003e3487\u003c/code\u003e {pr}\u003ccode\u003e3493\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e {pr}\u003ccode\u003e3482\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eopen_url\u003c/code\u003e on Windows when the file path contains spaces.\n{issue}\u003ccode\u003e2994\u003c/code\u003e {pr}\u003ccode\u003e3478\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-17\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e{class}\u003ccode\u003eParamType\u003c/code\u003e typing improvements. {pr}\u003ccode\u003e3371\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e{class}\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.3...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.81.1 to 1.82.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.82.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.82.1 (glacier).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Backport][v1.82.x][Python] Update lower bound for protobuf from 6.33.5 to 7.35.1 by \u003ca href=\"https://github.com/asheshvidyut\"\u003e\u003ccode\u003e@​asheshvidyut\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42920\"\u003egrpc/grpc#42920\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.82.0...v1.82.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.82.0...v1.82.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease v1.82.0\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.82.0 (glacier).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\nThis is release 1.82.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglacier\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[call creds] Add support for looking up and attaching regional access boundary policy metadata. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41594\"\u003e#41594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnregister CFStream callbacks during endpoint shutdown. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42211\"\u003e#42211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix fd 0 incorrectly treated as invalid across POSIX socket code. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41764\"\u003e#41764\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xDS] enable new ORCA-to-LRS propagation behavior (gRFC A85). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42411\"\u003e#42411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RetryFilter::LegacyCallData]: avoid tripping abseil nullopt assertion. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42405\"\u003e#42405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement A114: WRR support for custom backend metrics. (\u003ca...\n\n_Description has been truncated_","html_url":"https://github.com/wlilley93/boltrig/pull/52","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/wlilley93%2Fboltrig/issues/52","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/52/packages"},{"uuid":"4920656165","node_id":"PR_kwDOQedBh87zcBP8","number":651,"state":"open","title":"chore(deps): bump the pip-backend-patch-minor group in /backend with 5 updates","user":"dependabot[bot]","labels":["dependencies","type:chore","area:backend","area:ci"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-19T00:33:49.000Z","updated_at":"2026-07-19T00:34:01.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip-backend-patch-minor","update_count":5,"packages":[{"name":"fastapi","old_version":"0.139.0","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"sentry-sdk","old_version":"2.64.0","new_version":"2.66.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.7","new_version":"3.31.0","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the pip-backend-patch-minor group in /backend with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.139.0` | `0.139.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.64.0` | `2.66.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.15.22` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.7` | `3.31.0` |\n\nUpdates `fastapi` from 0.139.0 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.139.0...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.64.0 to 2.66.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.66.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(tracing) Promote trace_lifecycle and ignore_spans to top-level options by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6821\"\u003e#6821\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (HTTP clients) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6811\"\u003e#6811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (task queues) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6814\"\u003e#6814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (misc) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6815\"\u003e#6815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (databases) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6808\"\u003e#6808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (web frameworks) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6810\"\u003e#6810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (django) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6809\"\u003e#6809\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(logging) Fix flaky test_logging_captured_warnings by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6824\"\u003e#6824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove flaky no cyclic garbage test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6817\"\u003e#6817\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove Claude permission settings by \u003ca href=\"https://github.com/cleptric\"\u003e\u003ccode\u003e@​cleptric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6806\"\u003e#6806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003enullcontext\u003c/code\u003e to \u003ccode\u003esentry_sdk.utils\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6805\"\u003e#6805\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.65.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eHuey\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6779\"\u003e#6779\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on producer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6778\"\u003e#6778\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(arq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6767\"\u003e#6767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(dramatiq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6776\"\u003e#6776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(rq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6774\"\u003e#6774\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTake first sentry-trace header in case multiple are supplied by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6722\"\u003e#6722\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Avoid \u003ccode\u003eValueError\u003c/code\u003e in async middleware \u003ccode\u003eprocess_*\u003c/code\u003e hooks by \u003ca href=\"https://github.com/r0ro\"\u003e\u003ccode\u003e@​r0ro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6698\"\u003e#6698\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scope) Drop None user attribute values in set_user by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6692\"\u003e#6692\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Don't overwrite user set during request in AuthenticationMiddleware by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6760\"\u003e#6760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.66.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(tracing) Promote trace_lifecycle and ignore_spans to top-level options by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6821\"\u003e#6821\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (HTTP clients) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6811\"\u003e#6811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (task queues) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6814\"\u003e#6814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (misc) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6815\"\u003e#6815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (databases) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6808\"\u003e#6808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (web frameworks) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6810\"\u003e#6810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (django) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6809\"\u003e#6809\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(logging) Fix flaky test_logging_captured_warnings by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6824\"\u003e#6824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove flaky no cyclic garbage test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6817\"\u003e#6817\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove Claude permission settings by \u003ca href=\"https://github.com/cleptric\"\u003e\u003ccode\u003e@​cleptric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6806\"\u003e#6806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003enullcontext\u003c/code\u003e to \u003ccode\u003esentry_sdk.utils\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6805\"\u003e#6805\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.65.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eHuey\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6779\"\u003e#6779\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on producer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6778\"\u003e#6778\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(arq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6767\"\u003e#6767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(dramatiq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6776\"\u003e#6776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(rq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6774\"\u003e#6774\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTake first sentry-trace header in case multiple are supplied by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6722\"\u003e#6722\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Avoid \u003ccode\u003eValueError\u003c/code\u003e in async middleware \u003ccode\u003eprocess_*\u003c/code\u003e hooks by \u003ca href=\"https://github.com/r0ro\"\u003e\u003ccode\u003e@​r0ro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6698\"\u003e#6698\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scope) Drop None user attribute values in set_user by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6692\"\u003e#6692\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Don't overwrite user set during request in AuthenticationMiddleware by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6760\"\u003e#6760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5179f60b025693f381d6d93cd69817f32931825b\"\u003e\u003ccode\u003e5179f60\u003c/code\u003e\u003c/a\u003e update changelog with docs link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e4bcb59e5a87772b1a9dee6189889a2dcee8d776\"\u003e\u003ccode\u003ee4bcb59\u003c/code\u003e\u003c/a\u003e release: 2.66.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5ba869c03908edde69b2c6526bdd5f03a37bfef4\"\u003e\u003ccode\u003e5ba869c\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/efddaab9211769982e0c1874e2fb77b0db88b4cd\"\u003e\u003ccode\u003eefddaab\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/b199a9eea34d7107d81714ca2d1c759f3a6e7e0e\"\u003e\u003ccode\u003eb199a9e\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d695a6eb6ab6a81251d1abec12b61456b786a566\"\u003e\u003ccode\u003ed695a6e\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/dbf5d03f30d97cffd12116e09a34df7b4c2fdafe\"\u003e\u003ccode\u003edbf5d03\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5c1403440a25999f7d6ce69fcb106205be0b8322\"\u003e\u003ccode\u003e5c14034\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e0d2c4a4c5e01452865d06d4cdcafb5823fef164\"\u003e\u003ccode\u003ee0d2c4a\u003c/code\u003e\u003c/a\u003e feat(tracing): Promote trace_lifecycle and ignore_spans to top-level options ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/baa423fa766a5ba990ad27b1d3b1231f4b265182\"\u003e\u003ccode\u003ebaa423f\u003c/code\u003e\u003c/a\u003e test(logging): Fix flaky test_logging_captured_warnings (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/6824\"\u003e#6824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.64.0...2.66.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\nincreased memory use during reporting for large projects. Now we use a\ndifferent approach that is both faster and slimmer than 7.15.0. Fixes \u003ccode\u003eissue 2229\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2229:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003ecoveragepy/coveragepy#2229\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-1:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/50d865908dfeb21a0bf1e6f05db578c11662f8dd\"\u003e\u003ccode\u003e50d8659\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b5eed20618cfae07b35328b09dab388e9900f409\"\u003e\u003ccode\u003eb5eed20\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/78cab6e1770e55951c84a78d80b90c60ccfba4d5\"\u003e\u003ccode\u003e78cab6e\u003c/code\u003e\u003c/a\u003e fix: reduce memory use during reporting. \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003e#2229\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2231\"\u003e#2231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b4c1fda244a04caaa940ae77dd476a8bedfbf38e\"\u003e\u003ccode\u003eb4c1fda\u003c/code\u003e\u003c/a\u003e build: bump version to 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/182b010b63a2661c86df1ca3b3f84ce8511ee435\"\u003e\u003ccode\u003e182b010\u003c/code\u003e\u003c/a\u003e perf: resolve sysmon branch events lazily, one pair at a time (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ee271ee21fdf4c169648ff4ad3e9dd9d163e5e7f\"\u003e\u003ccode\u003eee271ee\u003c/code\u003e\u003c/a\u003e perf: compute multiline maps cheaply in the sysmon core (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1441b960c698d591d3a22a2190635039320459de\"\u003e\u003ccode\u003e1441b96\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 6 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2225\"\u003e#2225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/dd806350de678c9e4f137ffdda5cb131d269019c\"\u003e\u003ccode\u003edd80635\u003c/code\u003e\u003c/a\u003e fix: escape context labels in html report inline script block (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2224\"\u003e#2224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.7 to 3.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.31.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(platform): support Termux/Android by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/678\"\u003etox-dev/filelock#678\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/673\"\u003etox-dev/filelock#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs(mermaid): follow the light and dark theme toggle by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/674\"\u003etox-dev/filelock#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003easyncio: scope the reentrant-deadlock registry to the owning task by \u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocument every lock type, and stop evicting a marker we cannot read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/672\"\u003etox-dev/filelock#672\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.1...3.30.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.1...3.30.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs: separate changelog releases with a blank line by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/668\"\u003etox-dev/filelock#668\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix: tolerate NFSv3 stale handle in strict claim read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/669\"\u003etox-dev/filelock#669\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMatch fork-reset protocol on the class object by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/671\"\u003etox-dev/filelock#671\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ereject non-finite lease duration in marker records by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/670\"\u003etox-dev/filelock#670\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.0...3.30.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.0...3.30.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🎨 style: readability cleanup across the library by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/598\"\u003etox-dev/filelock#598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(api): ignore lifetime on native OS locks by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/593\"\u003etox-dev/filelock#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(unix): don't mutate lock file before acquiring flock by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/594\"\u003etox-dev/filelock#594\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.0 (2026-07-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Termux/Android, whose CPython ships without \u003ccode\u003eos.link\u003c/code\u003e and reports \u003ccode\u003esys.platform == \u0026quot;android\u0026quot;\u003c/code\u003e. \u003ccode\u003eimport filelock\u003c/code\u003e and both \u003ccode\u003eFileLock\u003c/code\u003e and \u003ccode\u003eSoftFileLock\u003c/code\u003e now work there, \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e reports its missing\nhard-link support only when acquired, and process liveness reads \u003ccode\u003e/proc\u003c/code\u003e on Android instead of PID-only checks. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e no longer lets two processes hold the lock at once under heavy contention. A holder now keeps\nits intent claim for the whole hold, so a contender whose directory scan races the holder's freshly linked claim can no\nlonger miss it and win alongside it. A held lock now exposes both an \u003ccode\u003eintent\u003c/code\u003e and a \u003ccode\u003eheld\u003c/code\u003e claim. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.3 (2026-07-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eAsyncFileLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLock\u003c/code\u003e no longer raise a deadlock \u003ccode\u003eRuntimeError\u003c/code\u003e when a different asyncio task\nwaits for a lock they hold; the check now scopes holders to the owning task, so only a same-task reacquire is refused. :pr:\u003ccode\u003e676\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size. The widened body column sized itself in \u003ccode\u003eem\u003c/code\u003e against the reader's font size while the breakpoints that fold the layout resolve \u003ccode\u003eem\u003c/code\u003e against a fixed 16px, so a reader whose default font is larger than 16px had the right-hand table of contents clipped off the edge. The body column now flexes instead, and the right-hand table of contents hides only at the mobile breakpoint. :pr:\u003ccode\u003e673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eColor the mermaid diagrams from whichever theme is active. They previously carried a light palette baked into each\ndiagram's source, which stayed light on a dark page. :pr:\u003ccode\u003e674\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.2 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.SoftFileLease\u003c/code\u003e deleting a live marker whose \u003ccode\u003emode\u003c/code\u003e it does not implement. An unrecognized mode now names its owner instead of reading as malformed, so a record written by a newer filelock survives the grace window rather than being evicted after two seconds. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e and :class:\u003ccode\u003e~filelock.AsyncStrictSoftFileLock\u003c/code\u003e calling themselves a native OS lock when they warn that they ignore \u003ccode\u003elifetime\u003c/code\u003e; they now say a strict claim is only ever cleared by \u003ccode\u003eforce_break()\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCover every lock type in the tutorials and how-to guides, with examples drawn from projects that use filelock, and color the mermaid diagrams.\nCorrect the claims that \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e exposes \u003ccode\u003eowner\u003c/code\u003e, that :class:\u003ccode\u003e~filelock.SoftFileLock\u003c/code\u003e evicts a strict sentinel, that :class:\u003ccode\u003e~filelock.ReadWriteLock\u003c/code\u003e requires a \u003ccode\u003e.db\u003c/code\u003e extension, and that every log record is \u003ccode\u003eDEBUG\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.1 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e and \u003ccode\u003eAsyncStrictSoftFileLock\u003c/code\u003e no longer abort acquisition when a peer's claim vanishes as an\nNFSv3 stale filehandle instead of a clean removal; the reader revalidates and skips it, so strict locks hold mutual\nexclusion across independent NFSv3 client caches. :pr:\u003ccode\u003e669\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e reads a marker whose lease duration is \u003ccode\u003enan\u003c/code\u003e or \u003ccode\u003einf\u003c/code\u003e as malformed rather than as a valid lease,\nso such a marker ages out through the grace window instead of raising \u003ccode\u003eLeaseSettingsMismatch\u003c/code\u003e on every contender. :pr:\u003ccode\u003e670\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.0 (2026-07-16)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3b66fdc1432e3b02e83525e61a99096aa09a933f\"\u003e\u003ccode\u003e3b66fdc\u003c/code\u003e\u003c/a\u003e Release 3.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/166b2b5d723a2e111be36a8b43e594a97141c0fd\"\u003e\u003ccode\u003e166b2b5\u003c/code\u003e\u003c/a\u003e ✨ feat(platform): support Termux/Android (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/678\"\u003e#678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/51bca89704e83ea6bed8462946c72835544dbc8f\"\u003e\u003ccode\u003e51bca89\u003c/code\u003e\u003c/a\u003e Release 3.30.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/fc277001fb6abaea57986dc52d9844d48a9ef2f6\"\u003e\u003ccode\u003efc27700\u003c/code\u003e\u003c/a\u003e asyncio: scope the reentrant-deadlock registry to the owning task (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/676\"\u003e#676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8699861c86445e3a46ac185dc206a44183cd681a\"\u003e\u003ccode\u003e8699861\u003c/code\u003e\u003c/a\u003e 📝 docs(mermaid): follow the light and dark theme toggle (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1b8da43740e2484fd3c84009e4693213fe6d5300\"\u003e\u003ccode\u003e1b8da43\u003c/code\u003e\u003c/a\u003e Keep both tables of contents on screen at any browser font size (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9a71d061458d18742be9c55170dd4465f8edf1c7\"\u003e\u003ccode\u003e9a71d06\u003c/code\u003e\u003c/a\u003e Release 3.30.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0dfa1b20fb9d85051e3304d3674787bea297b2d1\"\u003e\u003ccode\u003e0dfa1b2\u003c/code\u003e\u003c/a\u003e Document every lock type, and stop evicting a marker we cannot read (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/47d435f9458a70da803001ebbd424ca03f1afe41\"\u003e\u003ccode\u003e47d435f\u003c/code\u003e\u003c/a\u003e Release 3.30.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9b7b3b14027a385f8c636b7ee2ecfd3d052bdca0\"\u003e\u003ccode\u003e9b7b3b1\u003c/code\u003e\u003c/a\u003e reject non-finite lease duration in marker records (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/670\"\u003e#670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.7...3.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Prekzursil/momentstudio/pull/651","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Prekzursil%2Fmomentstudio/issues/651","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/651/packages"},{"uuid":"4920407261","node_id":"PR_kwDONTiDa87zbQ5B","number":5,"state":"closed","title":"Bump filelock from 3.16.1 to 3.20.3 in /tmrc","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-18T23:13:10.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-18T23:04:57.000Z","updated_at":"2026-07-18T23:13:19.000Z","time_to_close":493,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"filelock","old_version":"3.16.1","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":"/tmrc","ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.16.1 to 3.20.3.\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Unix systems without O_NOFOLLOW by \u003ca href=\"https://github.com/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/464\"\u003etox-dev/filelock#464\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/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\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.20.1...3.20.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.1...3.20.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2025-68146: Fix TOCTOU symlink vulnerability in lock file creation 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/461\"\u003etox-dev/filelock#461\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.20.0...3.20.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.0...3.20.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd tox.toml to sdist by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/436\"\u003etox-dev/filelock#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate docs with example by \u003ca href=\"https://github.com/znichollscr\"\u003e\u003ccode\u003e@​znichollscr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/438\"\u003etox-dev/filelock#438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd 3.14 support and drop 3.9 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/448\"\u003etox-dev/filelock#448\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/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/436\"\u003etox-dev/filelock#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/znichollscr\"\u003e\u003ccode\u003e@​znichollscr\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/438\"\u003etox-dev/filelock#438\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.19.1...3.20.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.19.1...3.20.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.19.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd 3.14t (free threading) to matrix by \u003ca href=\"https://github.com/paultiq\"\u003e\u003ccode\u003e@​paultiq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/433\"\u003etox-dev/filelock#433\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage by \u003ca href=\"https://github.com/paultiq\"\u003e\u003ccode\u003e@​paultiq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/434\"\u003etox-dev/filelock#434\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.0 (2026-07-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Termux/Android, whose CPython ships without \u003ccode\u003eos.link\u003c/code\u003e and reports \u003ccode\u003esys.platform == \u0026quot;android\u0026quot;\u003c/code\u003e. \u003ccode\u003eimport filelock\u003c/code\u003e and both \u003ccode\u003eFileLock\u003c/code\u003e and \u003ccode\u003eSoftFileLock\u003c/code\u003e now work there, \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e reports its missing\nhard-link support only when acquired, and process liveness reads \u003ccode\u003e/proc\u003c/code\u003e on Android instead of PID-only checks. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e no longer lets two processes hold the lock at once under heavy contention. A holder now keeps\nits intent claim for the whole hold, so a contender whose directory scan races the holder's freshly linked claim can no\nlonger miss it and win alongside it. A held lock now exposes both an \u003ccode\u003eintent\u003c/code\u003e and a \u003ccode\u003eheld\u003c/code\u003e claim. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.3 (2026-07-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eAsyncFileLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLock\u003c/code\u003e no longer raise a deadlock \u003ccode\u003eRuntimeError\u003c/code\u003e when a different asyncio task\nwaits for a lock they hold; the check now scopes holders to the owning task, so only a same-task reacquire is refused. :pr:\u003ccode\u003e676\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size. The widened body column sized itself in \u003ccode\u003eem\u003c/code\u003e against the reader's font size while the breakpoints that fold the layout resolve \u003ccode\u003eem\u003c/code\u003e against a fixed 16px, so a reader whose default font is larger than 16px had the right-hand table of contents clipped off the edge. The body column now flexes instead, and the right-hand table of contents hides only at the mobile breakpoint. :pr:\u003ccode\u003e673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eColor the mermaid diagrams from whichever theme is active. They previously carried a light palette baked into each\ndiagram's source, which stayed light on a dark page. :pr:\u003ccode\u003e674\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.2 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.SoftFileLease\u003c/code\u003e deleting a live marker whose \u003ccode\u003emode\u003c/code\u003e it does not implement. An unrecognized mode now names its owner instead of reading as malformed, so a record written by a newer filelock survives the grace window rather than being evicted after two seconds. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e and :class:\u003ccode\u003e~filelock.AsyncStrictSoftFileLock\u003c/code\u003e calling themselves a native OS lock when they warn that they ignore \u003ccode\u003elifetime\u003c/code\u003e; they now say a strict claim is only ever cleared by \u003ccode\u003eforce_break()\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCover every lock type in the tutorials and how-to guides, with examples drawn from projects that use filelock, and color the mermaid diagrams.\nCorrect the claims that \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e exposes \u003ccode\u003eowner\u003c/code\u003e, that :class:\u003ccode\u003e~filelock.SoftFileLock\u003c/code\u003e evicts a strict sentinel, that :class:\u003ccode\u003e~filelock.ReadWriteLock\u003c/code\u003e requires a \u003ccode\u003e.db\u003c/code\u003e extension, and that every log record is \u003ccode\u003eDEBUG\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.1 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e and \u003ccode\u003eAsyncStrictSoftFileLock\u003c/code\u003e no longer abort acquisition when a peer's claim vanishes as an\nNFSv3 stale filehandle instead of a clean removal; the reader revalidates and skips it, so strict locks hold mutual\nexclusion across independent NFSv3 client caches. :pr:\u003ccode\u003e669\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e reads a marker whose lease duration is \u003ccode\u003enan\u003c/code\u003e or \u003ccode\u003einf\u003c/code\u003e as malformed rather than as a valid lease,\nso such a marker ages out through the grace window instead of raising \u003ccode\u003eLeaseSettingsMismatch\u003c/code\u003e on every contender. :pr:\u003ccode\u003e670\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.0 (2026-07-16)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2e7d4046b6a2b375a573bcfbad21827b99f8939\"\u003e\u003ccode\u003ef2e7d40\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/50888548eb2f008d372e71f2835a47851ab83836\"\u003e\u003ccode\u003e5088854\u003c/code\u003e\u003c/a\u003e Support Unix systems without O_NOFOLLOW (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/377f62251d7cdf30768cc9ee1eb31cea1551c71b\"\u003e\u003ccode\u003e377f622\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/460\"\u003e#460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4724d7f8c3393ec1f048c93933e6e3e6ec321f0e\"\u003e\u003ccode\u003e4724d7f\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in lock file creation (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/461\"\u003e#461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/cb69414a2327cf0a9887e12054d1dc112ee700af\"\u003e\u003ccode\u003ecb69414\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/459\"\u003e#459\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0769294f14a6c62eea64741722f7acef5386b4cd\"\u003e\u003ccode\u003e0769294\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/458\"\u003e#458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/414193a188892bd376eb5c56eb45a9cf8ecc9284\"\u003e\u003ccode\u003e414193a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/457\"\u003e#457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1456797beb94ad59e5627462ad29f7ed3a966626\"\u003e\u003ccode\u003e1456797\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/456\"\u003e#456\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8d6bf90af313ac7fd6e41ef2b715d91dd6858f5c\"\u003e\u003ccode\u003e8d6bf90\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/455\"\u003e#455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.16.1...3.20.3\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.16.1\u0026new-version=3.20.3)](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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/KempnerInstitute/systems-scaling/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/KempnerInstitute/systems-scaling/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/KempnerInstitute%2Fsystems-scaling/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"},{"uuid":"4884369875","node_id":"PR_kwDOQ6OR-M7xnBGL","number":47,"state":"open","title":"ci: bump the pip-all group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python","ai-contributed","ai-failed"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-14T15:03:23.000Z","updated_at":"2026-07-14T15:24:04.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"ci: bump","group_name":"pip-all","update_count":20,"packages":[{"name":"ultralytics","old_version":"8.4.89","new_version":"8.4.95","repository_url":"https://github.com/ultralytics/ultralytics"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.68.4","repository_url":"https://github.com/tqdm/tqdm"},{"name":"boto3","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/boto/boto3"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"boto3-stubs","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"botocore","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/boto/botocore"},{"name":"build","old_version":"1.5.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"cuda-pathfinder","old_version":"1.5.5","new_version":"1.5.6","repository_url":"https://github.com/NVIDIA/cuda-python"},{"name":"filelock","old_version":"3.29.5","new_version":"3.29.7","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"grpcio","old_version":"1.82.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"librt","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/mypyc/librt"},{"name":"mypy-boto3-ec2","old_version":"1.43.39","new_version":"1.43.46","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"mypy-boto3-lambda","old_version":"1.43.37","new_version":"1.43.47","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"narwhals","old_version":"2.23.0","new_version":"2.24.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"s3transfer","old_version":"0.19.0","new_version":"0.19.1","repository_url":"https://github.com/boto/s3transfer"},{"name":"types-requests","old_version":"2.33.0.20260518","new_version":"2.33.0.20260712","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-all group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ultralytics](https://github.com/ultralytics/ultralytics) | `8.4.89` | `8.4.95` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.68.4` |\n| [boto3](https://github.com/boto/boto3) | `1.43.40` | `1.43.47` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.15.21` |\n| [boto3-stubs](https://github.com/youtype/mypy_boto3_builder) | `1.43.40` | `1.43.47` |\n| [botocore](https://github.com/boto/botocore) | `1.43.40` | `1.43.47` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.5.1` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.1` |\n| [cuda-pathfinder](https://github.com/NVIDIA/cuda-python) | `1.5.5` | `1.5.6` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.5` | `3.29.7` |\n| [grpcio](https://github.com/grpc/grpc) | `1.82.0` | `1.82.1` |\n| [librt](https://github.com/mypyc/librt) | `0.12.0` | `0.13.0` |\n| [mypy-boto3-ec2](https://github.com/youtype/mypy_boto3_builder) | `1.43.39` | `1.43.46` |\n| [mypy-boto3-lambda](https://github.com/youtype/mypy_boto3_builder) | `1.43.37` | `1.43.47` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.23.0` | `2.24.0` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.19.0` | `0.19.1` |\n| [types-requests](https://github.com/python/typeshed) | `2.33.0.20260518` | `2.33.0.20260712` |\n\n\nUpdates `ultralytics` from 8.4.89 to 8.4.95\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ultralytics/ultralytics/releases\"\u003eultralytics's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.4.95 - Fix restricted loading of training checkpoints (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/h2\u003e\n\u003ch2\u003e🌟 Summary\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ev8.4.95 improves training reliability, RT-DETR detection limits, input compatibility, and dataset usability—headlined by safer checkpoint loading for Platform GPU jobs.\u003c/strong\u003e 🚀\u003c/p\u003e\n\u003ch2\u003e📊 Key Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e🔒 Fixed restricted training checkpoint loading\u003c/strong\u003e — Raw checkpoints produced by Platform GPU workers no longer include training-only loss objects or NumPy scalar metadata that can be rejected by secure \u003ccode\u003eweights_only=True\u003c/code\u003e loading.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🎯 Improved RT-DETR \u003ccode\u003emax_det\u003c/code\u003e support\u003c/strong\u003e — The detection limit is now correctly applied during native prediction, validation, and model exports, including CoreML and other deployment formats.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🖼️ Expanded NumPy input compatibility\u003c/strong\u003e — NumPy images with grayscale, gray-plus-alpha, BGR, or BGRA channels are now normalized to match the model’s expected channel count.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🔢 Fixed uint8 tensor preprocessing\u003c/strong\u003e — Integer image tensors are handled without invalid floating-point dtype operations, while existing floating-point normalization behavior is preserved.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📦 Reduced automatic COCO downloads\u003c/strong\u003e — COCO detection, segmentation, and pose datasets no longer download the optional 7 GB \u003ccode\u003etest2017.zip\u003c/code\u003e by default. Standard downloads are now approximately 20.2–20.3 GB instead of about 27 GB.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🧪 Made segmentation conversion deterministic\u003c/strong\u003e — Mask files are processed in sorted filename order, improving repeatability across runs.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📈 Corrected pose metric curve labels\u003c/strong\u003e — Removed duplicate box labels so pose metrics align correctly with dashboards such as Weights \u0026amp; Biases.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📝 Clarified prediction and embedding return types\u003c/strong\u003e — Documentation and type hints now accurately indicate that streaming returns an iterator, while non-streaming calls return lists.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🛠️ Simplified edge-case handling\u003c/strong\u003e — Empty segmentation inputs now return a valid zero box immediately.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📚 Updated examples and training documentation\u003c/strong\u003e — The \u003ccode\u003eObjectCounter\u003c/code\u003e example now uses its returned results object, and automatic dataset download behavior is described more precisely.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🎯 Purpose \u0026amp; Impact\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eMore dependable cloud training:\u003c/strong\u003e Platform GPU workers can save, resume, and load raw training checkpoints more reliably, reducing avoidable job failures. ✅\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMore predictable deployment:\u003c/strong\u003e RT-DETR exports and validation now respect \u003ccode\u003emax_det\u003c/code\u003e, helping control output size, latency, and downstream processing requirements.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFewer input-related errors:\u003c/strong\u003e Applications using NumPy arrays or \u003ccode\u003euint8\u003c/code\u003e tensors can handle a wider range of camera and image formats without manual channel conversion.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFaster, lighter dataset setup:\u003c/strong\u003e Most COCO users save roughly 7 GB of storage and download time because test images without public ground truth are excluded.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMore reproducible data preparation:\u003c/strong\u003e Deterministic mask ordering makes conversion results and debugging more consistent.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eClearer analytics:\u003c/strong\u003e Correct pose labels prevent mislabeled or missing metric panels in experiment tracking tools.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNo major model architecture change:\u003c/strong\u003e This release focuses on reliability, compatibility, export behavior, and documentation rather than introducing a new model family. YOLO26 remains the latest recommended Ultralytics model for general use. 🌟\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStop coco.yaml and coco-pose.yaml from downloading test2017.zip by default by \u003ca href=\"https://github.com/raimbekovm\"\u003e\u003ccode\u003e@​raimbekovm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25136\"\u003eultralytics/ultralytics#25136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse ObjectCounter results in the usage example by \u003ca href=\"https://github.com/parthivdholaria\"\u003e\u003ccode\u003e@​parthivdholaria\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23417\"\u003eultralytics/ultralytics#23417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eProcess segmentation masks in deterministic order by \u003ca href=\"https://github.com/AlexRTer\"\u003e\u003ccode\u003e@​AlexRTer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24390\"\u003eultralytics/ultralytics#24390\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify empty segment handling in segment2box by \u003ca href=\"https://github.com/1548093028\"\u003e\u003ccode\u003e@​1548093028\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23770\"\u003eultralytics/ultralytics#23770\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize uint8 tensor sources without dtype errors by \u003ca href=\"https://github.com/jahsef\"\u003e\u003ccode\u003e@​jahsef\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23743\"\u003eultralytics/ultralytics#23743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify automatic dataset downloads in training docs by \u003ca href=\"https://github.com/vedantparnaik\"\u003e\u003ccode\u003e@​vedantparnaik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24155\"\u003eultralytics/ultralytics#24155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify streamed prediction return types by \u003ca href=\"https://github.com/thiliapr\"\u003e\u003ccode\u003e@​thiliapr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24391\"\u003eultralytics/ultralytics#24391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify streamed embedding return types by \u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24134\"\u003eultralytics/ultralytics#24134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePoseMetrics.curves\u003c/code\u003e returning duplicated box labels by \u003ca href=\"https://github.com/JESUSROYETH\"\u003e\u003ccode\u003e@​JESUSROYETH\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25148\"\u003eultralytics/ultralytics#25148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize NumPy channel count to the model in \u003ccode\u003eLoadPilAndNumpy\u003c/code\u003e by \u003ca href=\"https://github.com/JESUSROYETH\"\u003e\u003ccode\u003e@​JESUSROYETH\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25151\"\u003eultralytics/ultralytics#25151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(rtdetr): honor max_det in decoder exports and validation by \u003ca href=\"https://github.com/Hasnaathussain\"\u003e\u003ccode\u003e@​Hasnaathussain\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25153\"\u003eultralytics/ultralytics#25153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix restricted loading of training checkpoints by \u003ca href=\"https://github.com/glenn-jocher\"\u003e\u003ccode\u003e@​glenn-jocher\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25154\"\u003eultralytics/ultralytics#25154\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thiliapr\"\u003e\u003ccode\u003e@​thiliapr\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24391\"\u003eultralytics/ultralytics#24391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/parthivdholaria\"\u003e\u003ccode\u003e@​parthivdholaria\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23417\"\u003eultralytics/ultralytics#23417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jahsef\"\u003e\u003ccode\u003e@​jahsef\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23743\"\u003eultralytics/ultralytics#23743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vedantparnaik\"\u003e\u003ccode\u003e@​vedantparnaik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24155\"\u003eultralytics/ultralytics#24155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/1548093028\"\u003e\u003ccode\u003e@​1548093028\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23770\"\u003eultralytics/ultralytics#23770\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexRTer\"\u003e\u003ccode\u003e@​AlexRTer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24390\"\u003eultralytics/ultralytics#24390\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24134\"\u003eultralytics/ultralytics#24134\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/f5f5d43d0bd2e6dd03e5a073eb3bf9687c7c6e4a\"\u003e\u003ccode\u003ef5f5d43\u003c/code\u003e\u003c/a\u003e Fix restricted loading of training checkpoints (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/cdccf05c7c094d011078d933244b809ef6e970b9\"\u003e\u003ccode\u003ecdccf05\u003c/code\u003e\u003c/a\u003e fix(rtdetr): honor max_det in decoder exports and validation (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25153\"\u003e#25153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/bacd7ccc90148f365ac89547e3e5d0c9c8cf206a\"\u003e\u003ccode\u003ebacd7cc\u003c/code\u003e\u003c/a\u003e Normalize NumPy channel count to the model in \u003ccode\u003eLoadPilAndNumpy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25151\"\u003e#25151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/c1ad93990c48120454eb9b9290fd6ce4743c7072\"\u003e\u003ccode\u003ec1ad939\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ePoseMetrics.curves\u003c/code\u003e returning duplicated box labels (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25148\"\u003e#25148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5e31e316d729b4781be067792fec46929a86ced3\"\u003e\u003ccode\u003e5e31e31\u003c/code\u003e\u003c/a\u003e Clarify streamed embedding return types (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24134\"\u003e#24134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/4fbd0882c88c25430a7c4bc23f69b92b294787ab\"\u003e\u003ccode\u003e4fbd088\u003c/code\u003e\u003c/a\u003e Clarify streamed prediction return types (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24391\"\u003e#24391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5eb325fa86a00faa3261f0e1530d8161d22ada15\"\u003e\u003ccode\u003e5eb325f\u003c/code\u003e\u003c/a\u003e Clarify automatic dataset downloads in training docs (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24155\"\u003e#24155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/71ca45a7b5d1e21d3416ce7e646200af4af41c8f\"\u003e\u003ccode\u003e71ca45a\u003c/code\u003e\u003c/a\u003e Normalize uint8 tensor sources without dtype errors (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/23743\"\u003e#23743\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/6754b6ecd5f3aa2d435db3c0bd9b0b9d24501f49\"\u003e\u003ccode\u003e6754b6e\u003c/code\u003e\u003c/a\u003e Simplify empty segment handling in segment2box (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/23770\"\u003e#23770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5acbce655cb6981759c1847c0c95d1a9be18ecd8\"\u003e\u003ccode\u003e5acbce6\u003c/code\u003e\u003c/a\u003e Process segmentation masks in deterministic order (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24390\"\u003e#24390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ultralytics/ultralytics/compare/v8.4.89...v8.4.95\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tqdm` from 4.68.3 to 4.68.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tqdm/tqdm/releases\"\u003etqdm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003etqdm v4.68.4 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003etrim to \u003ccode\u003encols\u003c/code\u003e even when \u003ccode\u003e'{bar}' not in bar_format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etqdm.write\u003c/code\u003e when \u003ccode\u003estdout=None\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/53d096e77c28005b4f9fe1e9d6274ae311bf87e7\"\u003e\u003ccode\u003e53d096e\u003c/code\u003e\u003c/a\u003e bump version, merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e from its-Sohan/fix/write-stdout-none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/74ff9929dfec128972eb68f9ff27ae40fae6a21c\"\u003e\u003ccode\u003e74ff992\u003c/code\u003e\u003c/a\u003e fix: prevent tqdm.write from crashing when sys.stdout is none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/3757d0d13ec86d73a838b55fc35ef89bc42a3461\"\u003e\u003ccode\u003e3757d0d\u003c/code\u003e\u003c/a\u003e Merge pull requests \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e (fixes \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/55156ce4bed3457956d0557558b9bfb1c2de8a33\"\u003e\u003ccode\u003e55156ce\u003c/code\u003e\u003c/a\u003e fix: apply disp_trim to all format_meter return paths (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tqdm/tqdm/compare/v4.68.3...v4.68.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/11b997885803acb3a479c94338dcacbcfc107c64\"\u003e\u003ccode\u003e11b9978\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.47'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2a7cd54ca2b92b57deab9127ad73f11a162e634c\"\u003e\u003ccode\u003e2a7cd54\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/16f140d9d3b18e9957525c3ec2aa2af883f815d6\"\u003e\u003ccode\u003e16f140d\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c7888d6ae67b712df9be3462eeacd2c74e9e0c44\"\u003e\u003ccode\u003ec7888d6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/7db70eaaa1f3e68da7a6f590373a13b905c42849\"\u003e\u003ccode\u003e7db70ea\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1479621e3e478cfaa89f3b3327702865f0370968\"\u003e\u003ccode\u003e1479621\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.46\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/54abdb4aba7b980bf2fafd0d4e1043491eb6e63d\"\u003e\u003ccode\u003e54abdb4\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/75de6377d0a23c3468bfd8fc1740000599d73691\"\u003e\u003ccode\u003e75de637\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d3449aa60a089a207491d34f4a6f158bac78de50\"\u003e\u003ccode\u003ed3449aa\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/497253d2edd8f134e3af77d12916b89acb0857ba\"\u003e\u003ccode\u003e497253d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.45\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.40...1.43.47\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch3\u003ePackaging changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer provide mypyc-accelerated wheels for macOS x86_64 [mypyc-wheels \u003ca href=\"https://redirect.github.com/python/mypy/issues/119\"\u003e#119\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/mypyc/mypy_mypyc-wheels/pull/119\"\u003emypyc/mypy_mypyc-wheels#119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3-stubs` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/youtype/mypy_boto3_builder/releases\"\u003eboto3-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.8.0 - Python 3.8 runtime is back\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e \u003ccode\u003einstall_requires\u003c/code\u003e section is calculated based on dependencies in use, so \u003ccode\u003etyping-extensions\u003c/code\u003e version is set properly\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Replaced \u003ccode\u003etyping\u003c/code\u003e imports with \u003ccode\u003ecollections.abc\u003c/code\u003e with a fallback to \u003ccode\u003etyping\u003c/code\u003e for Python \u0026lt;3.9\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Added aliases for \u003ccode\u003ebuiltins.list\u003c/code\u003e, \u003ccode\u003ebuiltins.set\u003c/code\u003e, \u003ccode\u003ebuiltins.dict\u003c/code\u003e, and \u003ccode\u003ebuiltins.type\u003c/code\u003e, so Python 3.8 runtime should work as expected again (reported by \u003ca href=\"https://github.com/YHallouard\"\u003e\u003ccode\u003e@​YHallouard\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/youtype/mypy_boto3_builder/issues/340\"\u003e#340\u003c/a\u003e and \u003ca href=\"https://github.com/Omri-Ben-Yair\"\u003e\u003ccode\u003e@​Omri-Ben-Yair\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/youtype/mypy_boto3_builder/issues/336\"\u003e#336\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Unions use the same type annotations as the rest of the structures due to proper fallbacks\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e Universal input/output shapes were not replaced properly in service subresources\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[docs]\u003c/code\u003e Simplified doc links rendering for services\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e Cleaned up unnecessary imports in \u003ccode\u003eclient.pyi\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[builder]\u003c/code\u003e Import records with fallback are always rendered\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/youtype/mypy_boto3_builder/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/d5dccf3a48f775e729a550d81b4fe97d483ce2d7\"\u003e\u003ccode\u003ed5dccf3\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.47'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c4c3d0390f16ab46a67a072f94848deb0ac5bdac\"\u003e\u003ccode\u003ec4c3d03\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e8a69b4d1a7500ed3d8b623939ad8f7fb7bd9b92\"\u003e\u003ccode\u003ee8a69b4\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eefc25b1761c84e1e7e3fa237750daa79d7afbc6\"\u003e\u003ccode\u003eeefc25b\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/4249fcd7341f5d0168b038ce9ab30f98b1232c4e\"\u003e\u003ccode\u003e4249fcd\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/dbc7a739c17fac3a6d01d0e7b7e11b9faae4b580\"\u003e\u003ccode\u003edbc7a73\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/089203a13a3117eabaf8ca1f963b9665564888bf\"\u003e\u003ccode\u003e089203a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.46\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/601925e542e1cd3fcf2a861cbc0d1c0dbfacd92e\"\u003e\u003ccode\u003e601925e\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7831fa13c52d69b9f1caf2a85b0ef20dffa66ddf\"\u003e\u003ccode\u003e7831fa1\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/af6622c7a0c7d583fae766f96809ab856ce91a85\"\u003e\u003ccode\u003eaf6622c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.40...1.43.47\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.5.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: secure GitHub Actions workflows by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1068\"\u003epypa/build#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings forwarding in build_package and build_package_via_sdist by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1058\"\u003epypa/build#1058\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump virtualenv from 20.17 to 20.36.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1076\"\u003epypa/build#1076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump wheel from 0.36.0 to 0.38.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1075\"\u003epypa/build#1075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump pip from 22.3 to 26.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1074\"\u003epypa/build#1074\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: enforce lazy imports with flake8-lazy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1088\"\u003epypa/build#1088\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(deps): show wanted vs found in missing-deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1082\"\u003epypa/build#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: align action pin version comments by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1091\"\u003epypa/build#1091\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update isolated env example to use DefaultIsolatedEnv by \u003ca href=\"https://github.com/shenxianpeng\"\u003e\u003ccode\u003e@​shenxianpeng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1090\"\u003epypa/build#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: compact test_parse_args with a typed make_kwargs helper by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1092\"\u003epypa/build#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(typing): ban explicit Any across src and tests by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1093\"\u003epypa/build#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): warn on valueless config settings by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1081\"\u003epypa/build#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): add --sdist-extract-dir to reuse compiler caches by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1085\"\u003epypa/build#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⚠️ feat(util): deprecate project_wheel_metadata by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1084\"\u003epypa/build#1084\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump pre-commit tags by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1095\"\u003epypa/build#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat: report resolved build dependency versions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1086\"\u003epypa/build#1086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(env): control the isolated build environment location by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1083\"\u003epypa/build#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): machine-readable build report, and metadata from a wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1080\"\u003epypa/build#1080\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): drain verbose subprocess output without a worker thread by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1098\"\u003epypa/build#1098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(cli): minor cleanups in builder and CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1099\"\u003epypa/build#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): reject a file as --env-dir and drop a mutable default by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1100\"\u003epypa/build#1100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add classifier for 3.15 (testing on beta already) by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1104\"\u003epypa/build#1104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add lockfiles to gitignore by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1101\"\u003epypa/build#1101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add check-dist by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1103\"\u003epypa/build#1103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): surface debug paths when a backend build fails by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1087\"\u003epypa/build#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: shorten changelog entries to concise highlights by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1105\"\u003epypa/build#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): raise dependency floors to 3.10 minimums and drop pytest cap by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1107\"\u003epypa/build#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump mypy, restrict pytest 9.1.0 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1108\"\u003epypa/build#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(cli): fix CLI warnings being written to stdout instead of stderr by \u003ca href=\"https://github.com/ymyzk\"\u003e\u003ccode\u003e@​ymyzk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1111\"\u003epypa/build#1111\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump vulnerable dependency floors (virtualenv, wheel) by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1113\"\u003epypa/build#1113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: default --installer to pip in argparse by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1117\"\u003epypa/build#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: build correct dest path in Windows symlink support probe by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1118\"\u003epypa/build#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: derive dist-info directory from wheel contents, not filename by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1119\"\u003epypa/build#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use LF instead of os.linesep when writing pip/uv requirements files by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1120\"\u003epypa/build#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: decide color support per output stream, not solely from stdout by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1123\"\u003epypa/build#1123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: open the wheel only once in metadata_path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1126\"\u003epypa/build#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: minor robustness fixes from code review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1121\"\u003epypa/build#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: simplify code paths found in review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1124\"\u003epypa/build#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: memoize check_dependency by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1122\"\u003epypa/build#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: isolate color tests from NO_COLOR and FORCE_COLOR by \u003ca href=\"https://github.com/Yearnzq\"\u003e\u003ccode\u003e@​Yearnzq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1128\"\u003epypa/build#1128\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.5.1 (2026-07-09)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache\nreuse across rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds\n\u003cul\u003e\n\u003cli\u003eby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the\n\u0026quot;Debug a failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e\n(:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the\ndestination path - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e\nline endings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDeprecations and Removals\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate :func:\u003ccode\u003ebuild.util.project_wheel_metadata\u003c/code\u003e; use \u003ccode\u003epython -m build --metadata\u003c/code\u003e instead - by\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/d08fcd723500a7d676867144e1e7a22b650aeb7d\"\u003e\u003ccode\u003ed08fcd7\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/135801c502a7b36e25628d7c3ea9042fe8afa138\"\u003e\u003ccode\u003e135801c\u003c/code\u003e\u003c/a\u003e test: isolate color tests from NO_COLOR and FORCE_COLOR (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/820d4e5638eda9aa744528ab6b9a0e4be98d7d41\"\u003e\u003ccode\u003e820d4e5\u003c/code\u003e\u003c/a\u003e perf: memoize check_dependency (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/6c03264d186ce7a6c9f1e1990408a3a215dc7610\"\u003e\u003ccode\u003e6c03264\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/43c337a6bf55cbf2737bf938f3968be46ebc48b7\"\u003e\u003ccode\u003e43c337a\u003c/code\u003e\u003c/a\u003e refactor: simplify code paths found in review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1124\"\u003e#1124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/260ae22ee29fbca9b452a1b44cf3aacd09bb9250\"\u003e\u003ccode\u003e260ae22\u003c/code\u003e\u003c/a\u003e fix: minor robustness fixes from code review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/100e86e5e4f99167416b1d98783fc095223e0b8f\"\u003e\u003ccode\u003e100e86e\u003c/code\u003e\u003c/a\u003e refactor: open the wheel only once in metadata_path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/272db6ce3474299b763674550ba0075954177ed3\"\u003e\u003ccode\u003e272db6c\u003c/code\u003e\u003c/a\u003e fix: decide color support per output stream, not solely from stdout (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1123\"\u003e#1123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/bc4ca7c7cb2033d7fecbfe82f8b3d7df7376572f\"\u003e\u003ccode\u003ebc4ca7c\u003c/code\u003e\u003c/a\u003e fix: use LF instead of os.linesep when writing pip/uv requirements files (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/16d8143d9979fc5432b8b1effb1dc3f6048c7840\"\u003e\u003ccode\u003e16d8143\u003c/code\u003e\u003c/a\u003e fix: derive dist-info directory from wheel contents, not filename (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.5.0...1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: ...\n\n_Description has been truncated_","html_url":"https://github.com/rssrn/birdbird/pull/47","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/rssrn%2Fbirdbird/issues/47","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/47/packages"},{"uuid":"4874721173","node_id":"PR_kwDOK8S49c7xHoEK","number":100,"state":"open","title":":arrow_up: Bump the all group with 8 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-13T14:42:07.000Z","updated_at":"2026-07-13T14:45:23.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":":arrow_up: Bump","group_name":"all","update_count":8,"packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"build","old_version":"1.5.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.5","new_version":"3.29.7","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"librt","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/mypyc/librt"}],"path":null,"ecosystem":"pip"},"body":"Bumps the all group with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.15.21` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.5.1` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.5` | `3.29.7` |\n| [librt](https://github.com/mypyc/librt) | `0.12.0` | `0.13.0` |\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003efor\u003c/code\u003e loop over list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21686\"\u003e21686\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix memory safety of \u003ccode\u003elist.count\u003c/code\u003e on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21680\"\u003e21680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003evec\u003c/code\u003e creation from list memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21681\"\u003e21681\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.5.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: secure GitHub Actions workflows by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1068\"\u003epypa/build#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings forwarding in build_package and build_package_via_sdist by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1058\"\u003epypa/build#1058\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump virtualenv from 20.17 to 20.36.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1076\"\u003epypa/build#1076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump wheel from 0.36.0 to 0.38.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1075\"\u003epypa/build#1075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump pip from 22.3 to 26.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1074\"\u003epypa/build#1074\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: enforce lazy imports with flake8-lazy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1088\"\u003epypa/build#1088\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(deps): show wanted vs found in missing-deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1082\"\u003epypa/build#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: align action pin version comments by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1091\"\u003epypa/build#1091\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update isolated env example to use DefaultIsolatedEnv by \u003ca href=\"https://github.com/shenxianpeng\"\u003e\u003ccode\u003e@​shenxianpeng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1090\"\u003epypa/build#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: compact test_parse_args with a typed make_kwargs helper by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1092\"\u003epypa/build#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(typing): ban explicit Any across src and tests by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1093\"\u003epypa/build#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): warn on valueless config settings by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1081\"\u003epypa/build#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): add --sdist-extract-dir to reuse compiler caches by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1085\"\u003epypa/build#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⚠️ feat(util): deprecate project_wheel_metadata by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1084\"\u003epypa/build#1084\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump pre-commit tags by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1095\"\u003epypa/build#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat: report resolved build dependency versions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1086\"\u003epypa/build#1086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(env): control the isolated build environment location by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1083\"\u003epypa/build#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): machine-readable build report, and metadata from a wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1080\"\u003epypa/build#1080\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): drain verbose subprocess output without a worker thread by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1098\"\u003epypa/build#1098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(cli): minor cleanups in builder and CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1099\"\u003epypa/build#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): reject a file as --env-dir and drop a mutable default by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1100\"\u003epypa/build#1100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add classifier for 3.15 (testing on beta already) by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1104\"\u003epypa/build#1104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add lockfiles to gitignore by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1101\"\u003epypa/build#1101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add check-dist by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1103\"\u003epypa/build#1103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): surface debug paths when a backend build fails by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1087\"\u003epypa/build#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: shorten changelog entries to concise highlights by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1105\"\u003epypa/build#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): raise dependency floors to 3.10 minimums and drop pytest cap by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1107\"\u003epypa/build#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump mypy, restrict pytest 9.1.0 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1108\"\u003epypa/build#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(cli): fix CLI warnings being written to stdout instead of stderr by \u003ca href=\"https://github.com/ymyzk\"\u003e\u003ccode\u003e@​ymyzk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1111\"\u003epypa/build#1111\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump vulnerable dependency floors (virtualenv, wheel) by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1113\"\u003epypa/build#1113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: default --installer to pip in argparse by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1117\"\u003epypa/build#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: build correct dest path in Windows symlink support probe by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1118\"\u003epypa/build#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: derive dist-info directory from wheel contents, not filename by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1119\"\u003epypa/build#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use LF instead of os.linesep when writing pip/uv requirements files by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1120\"\u003epypa/build#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: decide color support per output stream, not solely from stdout by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1123\"\u003epypa/build#1123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: open the wheel only once in metadata_path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1126\"\u003epypa/build#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: minor robustness fixes from code review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1121\"\u003epypa/build#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: simplify code paths found in review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1124\"\u003epypa/build#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: memoize check_dependency by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1122\"\u003epypa/build#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: isolate color tests from NO_COLOR and FORCE_COLOR by \u003ca href=\"https://github.com/Yearnzq\"\u003e\u003ccode\u003e@​Yearnzq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1128\"\u003epypa/build#1128\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.5.1 (2026-07-09)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache reuse\nacross rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds -\nby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the \u0026quot;Debug\na failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the destination\npath - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e line\nendings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDeprecations and Removals\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate :func:\u003ccode\u003ebuild.util.project_wheel_metadata\u003c/code\u003e; use \u003ccode\u003epython -m build --metadata\u003c/code\u003e instead - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e557\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWarn on config settings without a value (e.g. \u003ccode\u003e-C--my-flag\u003c/code\u003e); use \u003ccode\u003e-C--my-flag=\u003c/code\u003e instead for compatibility with pip\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/d08fcd723500a7d676867144e1e7a22b650aeb7d\"\u003e\u003ccode\u003ed08fcd7\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/135801c502a7b36e25628d7c3ea9042fe8afa138\"\u003e\u003ccode\u003e135801c\u003c/code\u003e\u003c/a\u003e test: isolate color tests from NO_COLOR and FORCE_COLOR (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/820d4e5638eda9aa744528ab6b9a0e4be98d7d41\"\u003e\u003ccode\u003e820d4e5\u003c/code\u003e\u003c/a\u003e perf: memoize check_dependency (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/6c03264d186ce7a6c9f1e1990408a3a215dc7610\"\u003e\u003ccode\u003e6c03264\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/43c337a6bf55cbf2737bf938f3968be46ebc48b7\"\u003e\u003ccode\u003e43c337a\u003c/code\u003e\u003c/a\u003e refactor: simplify code paths found in review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1124\"\u003e#1124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/260ae22ee29fbca9b452a1b44cf3aacd09bb9250\"\u003e\u003ccode\u003e260ae22\u003c/code\u003e\u003c/a\u003e fix: minor robustness fixes from code review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/100e86e5e4f99167416b1d98783fc095223e0b8f\"\u003e\u003ccode\u003e100e86e\u003c/code\u003e\u003c/a\u003e refactor: open the wheel only once in metadata_path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/272db6ce3474299b763674550ba0075954177ed3\"\u003e\u003ccode\u003e272db6c\u003c/code\u003e\u003c/a\u003e fix: decide color support per output stream, not solely from stdout (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1123\"\u003e#1123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/bc4ca7c7cb2033d7fecbfe82f8b3d7df7376572f\"\u003e\u003ccode\u003ebc4ca7c\u003c/code\u003e\u003c/a\u003e fix: use LF instead of os.linesep when writing pip/uv requirements files (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/16d8143d9979fc5432b8b1effb1dc3f6048c7840\"\u003e\u003ccode\u003e16d8143\u003c/code\u003e\u003c/a\u003e fix: derive dist-info directory from wheel contents, not filename (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.5.0...1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/182b010b63a2661c86df1ca3b3f84ce8511ee435\"\u003e\u003ccode\u003e182b010\u003c/code\u003e\u003c/a\u003e perf: resolve sysmon branch events lazily, one pair at a time (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ee271ee21fdf4c169648ff4ad3e9dd9d163e5e7f\"\u003e\u003ccode\u003eee271ee\u003c/code\u003e\u003c/a\u003e perf: compute multiline maps cheaply in the sysmon core (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1441b960c698d591d3a22a2190635039320459de\"\u003e\u003ccode\u003e1441b96\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 6 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2225\"\u003e#2225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/dd806350de678c9e4f137ffdda5cb131d269019c\"\u003e\u003ccode\u003edd80635\u003c/code\u003e\u003c/a\u003e fix: escape context labels in html report inline script block (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2224\"\u003e#2224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/7c3ae71ca654a0b0e3184d8574aefd9dd511a006\"\u003e\u003ccode\u003e7c3ae71\u003c/code\u003e\u003c/a\u003e docs: normalize earlier history order (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2222\"\u003e#2222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/088dc601697077364c46967f3ac9afe3bde0083b\"\u003e\u003ccode\u003e088dc60\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f7e15a8e31bd98d8f89a7e4602fa6b8bd7c5e468\"\u003e\u003ccode\u003ef7e15a8\u003c/code\u003e\u003c/a\u003e test: upload .json and .xml coverage reports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/3b6211214d7033e86b88a6e032474c20b7c32814\"\u003e\u003ccode\u003e3b62112\u003c/code\u003e\u003c/a\u003e docs: thanks, Paul Kehrer\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.5 to 3.29.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.29.7\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003easyncio: detect cross-instance reentrant deadlocks before the poll loop by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/586\"\u003etox-dev/filelock#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft_rw): evict non-regular write marker without reading it by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/588\"\u003etox-dev/filelock#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e_util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/589\"\u003etox-dev/filelock#589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.6...3.29.7\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.6...3.29.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eserialise singleton construction in FileLockMeta by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/581\"\u003etox-dev/filelock#581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e_util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/582\"\u003etox-dev/filelock#582\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: silence fork DeprecationWarning on 3.15 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/585\"\u003etox-dev/filelock#585\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.5...3.29.6\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.5...3.29.6\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1efb8932c08789deb08ad93a91d8996cc36bb9cc\"\u003e\u003ccode\u003e1efb893\u003c/code\u003e\u003c/a\u003e _util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3547d58a293651fcf6cf8544b0002e6d7b357332\"\u003e\u003ccode\u003e3547d58\u003c/code\u003e\u003c/a\u003e soft_rw: evict a non-regular write marker without reading it (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/616400e382cdc9cc8c95823014e4d2d61a70095c\"\u003e\u003ccode\u003e616400e\u003c/code\u003e\u003c/a\u003e asyncio: detect cross-instance reentrant deadlocks before the poll loop (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/586\"\u003e#586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f8b0e9341cba0cc12eacf50605f290123f33ca32\"\u003e\u003ccode\u003ef8b0e93\u003c/code\u003e\u003c/a\u003e test: silence fork DeprecationWarning on 3.15 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/585\"\u003e#585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b68be65b941836dce63cba2cf844dc55935ca8ba\"\u003e\u003ccode\u003eb68be65\u003c/code\u003e\u003c/a\u003e _util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/a833dd961e4a1ee569e42c10ca305cd088e14c1b\"\u003e\u003ccode\u003ea833dd9\u003c/code\u003e\u003c/a\u003e serialise singleton construction in FileLockMeta (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/581\"\u003e#581\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/bb2f884c275491222f620b8306d9b9bbc4f406bf\"\u003e\u003ccode\u003ebb2f884\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/da9c3ed54fec55dede6b308319587ec2242f709a\"\u003e\u003ccode\u003eda9c3ed\u003c/code\u003e\u003c/a\u003e :moneybag: Surface GitHub Sponsors + thanks.dev\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.5...3.29.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `librt` from 0.12.0 to 0.13.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/05a6a214c72932b113efc2012a7e9e6b54fd0ff8\"\u003e\u003ccode\u003e05a6a21\u003c/code\u003e\u003c/a\u003e Sync mypy and bump version to 0.13.0\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/librt/compare/v0.12.0...v0.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/dribia/poetry-git-branch-plugin/pull/100","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dribia%2Fpoetry-git-branch-plugin/issues/100","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/100/packages"},{"uuid":"4816189319","node_id":"PR_kwDOSpbqEs7uManv","number":97,"state":"open","title":"chore(deps): update filelock requirement from \u003e=3.29.4 to \u003e=3.29.5 in /services/pre-processing","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-06T05:18:00.000Z","updated_at":"2026-07-06T05:18:01.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"filelock","old_version":"\u003e=3.29.4","new_version":"\u003e=3.29.5","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":"/services/pre-processing","ecosystem":"pip"},"body":"Updates the requirements on [filelock](https://github.com/tox-dev/py-filelock) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/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.29.4...3.29.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Lazynext-Platform/Lazynext/pull/97","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lazynext-Platform%2FLazynext/issues/97","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/97/packages"},{"uuid":"4811982359","node_id":"PR_kwDOPUnMy87t_17t","number":134,"state":"open","title":"chore(deps): bump the uv group across 1 directory with 7 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-05T07:20:42.000Z","updated_at":"2026-07-05T07:22:30.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv","update_count":7,"packages":[{"name":"requests","old_version":"2.32.5","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"filelock","old_version":"3.20.0","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"idna","old_version":"3.11","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"pillow","old_version":"11.3.0","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"protobuf","old_version":"6.32.1","new_version":"6.33.5","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"urllib3","old_version":"2.5.0","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"virtualenv","old_version":"20.35.4","new_version":"20.36.1","repository_url":"https://github.com/pypa/virtualenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 7 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.20.0` | `3.20.3` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.15` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.3.0` | `12.2.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.32.1` | `6.33.5` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.5.0` | `2.7.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `20.35.4` | `20.36.1` |\n\n\nUpdates `requests` from 2.32.5 to 2.33.0\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.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\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\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\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/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\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#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\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\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc 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/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/753fd08c5eacce0aa0df73fe47e49525c67e0a29\"\u003e\u003ccode\u003e753fd08\u003c/code\u003e\u003c/a\u003e docs: fix FAQ grammar in httplib2 example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/774a0b837a194ee885d4fdd9ca947900cc3daf71\"\u003e\u003ccode\u003e774a0b8\u003c/code\u003e\u003c/a\u003e docs(socks): same block as other sections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/9c72a41bec8597f948c9d8caa5dc3f12273b3303\"\u003e\u003ccode\u003e9c72a41\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.33.0 to 4.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/ebf71906798ec82f34e07d3168f8b8aecaf8a3be\"\u003e\u003ccode\u003eebf7190\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.32.0 to 4.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0e4ae38f0c93d4f92a96c774bd52c069d12a4798\"\u003e\u003ccode\u003e0e4ae38\u003c/code\u003e\u003c/a\u003e docs: exclude Response.is_permanent_redirect from API docs (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7244\"\u003e#7244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d568f47278492e630cc990a259047c67991d007a\"\u003e\u003ccode\u003ed568f47\u003c/code\u003e\u003c/a\u003e docs: clarify Quickstart POST example (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6960\"\u003e#6960\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.20.0 to 3.20.3\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Unix systems without O_NOFOLLOW by \u003ca href=\"https://github.com/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/464\"\u003etox-dev/filelock#464\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/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\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.20.1...3.20.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.1...3.20.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2025-68146: Fix TOCTOU symlink vulnerability in lock file creation 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/461\"\u003etox-dev/filelock#461\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.20.0...3.20.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.0...3.20.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2e7d4046b6a2b375a573bcfbad21827b99f8939\"\u003e\u003ccode\u003ef2e7d40\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/50888548eb2f008d372e71f2835a47851ab83836\"\u003e\u003ccode\u003e5088854\u003c/code\u003e\u003c/a\u003e Support Unix systems without O_NOFOLLOW (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/377f62251d7cdf30768cc9ee1eb31cea1551c71b\"\u003e\u003ccode\u003e377f622\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/460\"\u003e#460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4724d7f8c3393ec1f048c93933e6e3e6ec321f0e\"\u003e\u003ccode\u003e4724d7f\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in lock file creation (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/461\"\u003e#461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/cb69414a2327cf0a9887e12054d1dc112ee700af\"\u003e\u003ccode\u003ecb69414\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/459\"\u003e#459\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0769294f14a6c62eea64741722f7acef5386b4cd\"\u003e\u003ccode\u003e0769294\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/458\"\u003e#458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/414193a188892bd376eb5c56eb45a9cf8ecc9284\"\u003e\u003ccode\u003e414193a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/457\"\u003e#457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1456797beb94ad59e5627462ad29f7ed3a966626\"\u003e\u003ccode\u003e1456797\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/456\"\u003e#456\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8d6bf90af313ac7fd6e41ef2b715d91dd6858f5c\"\u003e\u003ccode\u003e8d6bf90\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/455\"\u003e#455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.20.0...3.20.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.11 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\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/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.11...v3.15\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 11.3.0 to 12.2.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.2.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9522\"\u003e#9522\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd loader plugins: AMOS abk, Atari Degas, 40+ more obscure formats via Netpbm \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9482\"\u003e#9482\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9515\"\u003e#9515\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eJeffrey A. Clark -\u0026gt; Jeffrey 'Alex' Clark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9513\"\u003e#9513\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 release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9394\"\u003e#9394\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9419\"\u003e#9419\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9456\"\u003e#9456\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9467\"\u003e#9467\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 Amiga Workbench .info loader to 3rd party plugins list \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9459\"\u003e#9459\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMerge PFM documentation into PPM \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9434\"\u003e#9434\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 macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9431\"\u003e#9431\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix CVE number \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9430\"\u003e#9430\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\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 xz to 5.8.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9523\"\u003e#9523\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 libjpeg-turbo to 3.1.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9507\"\u003e#9507\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 libpng to 1.6.56 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9499\"\u003e#9499\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 freetype to 2.14.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9485\"\u003e#9485\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libavif to 1.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9479\"\u003e#9479\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 13.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9461\"\u003e#9461\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 Ghostscript to 10.7.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9469\"\u003e#9469\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 harfbuzz to 13.0.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9453\"\u003e#9453\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 libavif to 1.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9460\"\u003e#9460\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 freetype to 2.14.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9449\"\u003e#9449\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 actions/download-artifact action to v8 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9451\"\u003e#9451\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.55 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9425\"\u003e#9425\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\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCleanup .spider extension in the same test where it is added \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9517\"\u003e#9517\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRun tests in parallel via tox for 3.5x speedup \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9516\"\u003e#9516\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eEnable colour in CI logs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9486\"\u003e#9486\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Ghostscript to 10.7.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9469\"\u003e#9469\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eSimplify TGA test code \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9477\"\u003e#9477\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 tests to check for ValueError when encoding an empty image \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9464\"\u003e#9464\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpgrade CI from \u003ccode\u003emacos-15-intel\u003c/code\u003e to \u003ccode\u003emacos-26-intel\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9454\"\u003e#9454\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd check-case-conflict hook \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9446\"\u003e#9446\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eSpecify platform when pulling docker image \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9440\"\u003e#9440\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eGHA: Cache libavif and webp builds for Ubuntu \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9437\"\u003e#9437\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9431\"\u003e#9431\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\u003eOther changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck calloc return value \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9527\"\u003e#9527\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCheck all allocs in the Arrow tree \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9488\"\u003e#9488\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eReject non-numeric elements inside list coords \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9526\"\u003e#9526\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove variable declaration inside define \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9525\"\u003e#9525\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/3c41c095064200a02672d89cc5ff629eaf4b0d4f\"\u003e\u003ccode\u003e3c41c09\u003c/code\u003e\u003c/a\u003e 12.2.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/cdaa29eb520291c4f1fb50fb71ae46502d41e460\"\u003e\u003ccode\u003ecdaa29e\u003c/code\u003e\u003c/a\u003e Check calloc return value (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9527\"\u003e#9527\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/585b2f5a780722c8a5bfffb3a40f7f42e8a205be\"\u003e\u003ccode\u003e585b2f5\u003c/code\u003e\u003c/a\u003e Check calloc return value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ecf011ea15991d4cebacd946e58270cc30b0f2c1\"\u003e\u003ccode\u003eecf011e\u003c/code\u003e\u003c/a\u003e Check all allocs in the Arrow tree (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9488\"\u003e#9488\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/cf6de8ca9b23e714aa5310e1c791eda66fc0b670\"\u003e\u003ccode\u003ecf6de8c\u003c/code\u003e\u003c/a\u003e Reject non-numeric elements inside list coords (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9526\"\u003e#9526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ffdcede6516b28d9667c92929854023d17048b64\"\u003e\u003ccode\u003effdcede\u003c/code\u003e\u003c/a\u003e Update 12.2.0 release notes (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9522\"\u003e#9522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/7929d7760fe5a307ba5ae6eabdf70ae4486b147c\"\u003e\u003ccode\u003e7929d77\u003c/code\u003e\u003c/a\u003e Added security release notes (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/149\"\u003e#149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c4f7aa5dfb4dbd1242978ac235e01b9934ec6d3c\"\u003e\u003ccode\u003ec4f7aa5\u003c/code\u003e\u003c/a\u003e Added security release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/22cdb5f2e4b15250c06563b1124ac1667342712f\"\u003e\u003ccode\u003e22cdb5f\u003c/code\u003e\u003c/a\u003e Move variable declaration inside define (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9525\"\u003e#9525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/fc15b3b01899408ec989d7804c5283e13802d057\"\u003e\u003ccode\u003efc15b3b\u003c/code\u003e\u003c/a\u003e Resize tall images vertically first (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9524\"\u003e#9524\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/11.3.0...12.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `protobuf` from 6.32.1 to 6.33.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/protocolbuffers/protobuf/releases\"\u003eprotobuf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eProtocol Buffers v34.0-rc1\u003c/h2\u003e\n\u003ch1\u003eAnnouncements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eThis version includes breaking changes to: C++, Objective-C, PHP, Python.\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e[Bazel] Remove deprecated ProtoInfo.transitive_imports. Use equivalent transitive_sources instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Make generator headers private (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/3a2af3510f0d454dbe3e4dc281674b61c4d20b9e\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/3a2af3510f0d454dbe3e4dc281674b61c4d20b9e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Add a debug check that the target of CopyFrom is not a descendant of the source. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/7a7589823d2cfaaf7994b050e98d5d553bc9b1c1\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/7a7589823d2cfaaf7994b050e98d5d553bc9b1c1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Add [[nodiscard]] to many APIs. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/a70115f33f9af2c4b2202c800b84837e7fe0d738\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/a70115f33f9af2c4b2202c800b84837e7fe0d738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Make the arena-enabled constructors of \u003ccode\u003eRepeatedField\u003c/code\u003e, \u003ccode\u003eRepeatedPtrField\u003c/code\u003e, and \u003ccode\u003eMap\u003c/code\u003e private. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/ef890c3d0c79398c70e047fe5dd893f460ba2336\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/ef890c3d0c79398c70e047fe5dd893f460ba2336\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove deprecated FieldDescriptor::label() in OSS. Use is_repeated() or is_required() instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Removes proto2::util::MessageDifferencer::AddIgnoreCriteria that takes a raw pointer as an argument in favor of the overload that takes a unique_ptr. Remove macro PROTOBUF_FUTURE_REMOVE_ADD_IGNORE_CRITERIA (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/b115358c64127896fed88b8b5ef5d91d86d8cbae\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/b115358c64127896fed88b8b5ef5d91d86d8cbae\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove deprecated FieldDescriptor::has_optional_keyword() in OSS. Use is_repeated() or has_presence() instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/68346ec9348e932664e58c3ecdcd1478f95233a8\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/68346ec9348e932664e58c3ecdcd1478f95233a8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove AddUnusedImportTrackFile() and ClearUnusedImportTrackFiles(). Remove PROTOBUF_FUTURE_RENAME_ADD_UNUSED_IMPORT (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/837a2cd1d6c75402b2503ffe7cd8aeaf25868536\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/837a2cd1d6c75402b2503ffe7cd8aeaf25868536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove deprecated FieldDescriptor::is_optional() in OSS. Use (!is_required() \u0026amp;\u0026amp; !is_repeated()) instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/9dbc5d479a8e453921485d8d3de47fb3c005f1af\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/9dbc5d479a8e453921485d8d3de47fb3c005f1af\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove deprecated UseDeprecatedLegacyJsonFieldConflicts() (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] All entity names have length limit (2afb0dc)\u003c/li\u003e\n\u003cli\u003e[ObjC] Remove \u003ccode\u003egenerate_minimal_imports\u003c/code\u003e generation option warning (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/45b1297fdaad5a9436d0e207422168c38dc45ac4\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/45b1297fdaad5a9436d0e207422168c38dc45ac4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ObjC] Fix nullability annotations on some \u003ccode\u003eGPB*Dictionary\u003c/code\u003e types. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/ea67d6d26a48478a567c404679e3bb99cf230d50\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/ea67d6d26a48478a567c404679e3bb99cf230d50\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ObjC] Remove \u003ccode\u003e-[GPBFieldDescriptor optional]\u003c/code\u003e (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/3414dc151eb4dcbdb2ca952e2589993bf7af75c4\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/3414dc151eb4dcbdb2ca952e2589993bf7af75c4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Other] Remove deprecated flag for enabling MSVC support (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/97c979be6e0907e1051bee62584dac4594e73fa7\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/97c979be6e0907e1051bee62584dac4594e73fa7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Remove deprecated PHP APIs (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/9c45014099a4f7004fab6dd1278de2f4f2a393c5\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/9c45014099a4f7004fab6dd1278de2f4f2a393c5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Remove deprecated PHP APIs FieldDescriptor getLabel, use IsRepeated or isRequired instead. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345\u003c/a\u003e, \u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/cd76e675b14d00dda5623b30835d2bc7105fccc6\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/cd76e675b14d00dda5623b30835d2bc7105fccc6\u003c/a\u003e, \u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP]  Add PHP typehints for setters and remove redundant GPBUtil checks (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/pull/25296\"\u003eprotocolbuffers/protobuf#25296\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/aee03b78929c02461a5f9d8e136a2a016359b0cd\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/aee03b78929c02461a5f9d8e136a2a016359b0cd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP]  support default values for editions/proto2 (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/pull/25161\"\u003eprotocolbuffers/protobuf#25161\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/b01099d56350551bae3da88b97bf3027274c9f17\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/b01099d56350551bae3da88b97bf3027274c9f17\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Raise errors in OSS when assign bool to int/enum field in Python Proto. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/5b116fe2f14f49dd0cc3b76089983717f211025c\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/5b116fe2f14f49dd0cc3b76089983717f211025c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove float_format/double_format from python proto text_format (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/e4854a186e0bfa867d5bfa5cd850608a948fd488\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/e4854a186e0bfa867d5bfa5cd850608a948fd488\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Raise TypeError when convert non-timedelta to Duration, or convert non-datetime to Timestamp in python proto. (Original code may raise ArributeError) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/00aaca1b4d98954bc2933d7c8a5379ba6088124c\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/00aaca1b4d98954bc2933d7c8a5379ba6088124c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove float_precision from python proto json_format (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/f027f1fcd52b9d080b7ee79f4024f53cf54e0dc5\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/f027f1fcd52b9d080b7ee79f4024f53cf54e0dc5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove deprecated FieldDescriptor::label() in OSS. Use is_repeated() or is_required() instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove deprecated FieldDescriptor.label (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/0a8ff55518ea5874478ad5b26515b31d186045a9\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/0a8ff55518ea5874478ad5b26515b31d186045a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove deprecated UseDeprecatedLegacyJsonFieldConflicts() (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://protobuf.dev/news/\"\u003eProtobuf News\u003c/a\u003e may include additional announcements or pre-announcements for upcoming changes.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://protobuf.dev/support/migration/\"\u003eMigration Guide\u003c/a\u003e may include additional guidance for breaking changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eBazel\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix: cc_toolchain should prefer protoc when prebuilt flag is flipped. (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/issues/25168\"\u003e#25168\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/8c857c3a1c6a106b0a096f1c9fa504bfaca035a9\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/8c857c3a1c6a106b0a096f1c9fa504bfaca035a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBreaking change: Remove deprecated ProtoInfo.transitive_imports. Use equivalent transitive_sources instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFeat(bazel): wire up prebuilt protoc toolchain (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/issues/24115\"\u003e#24115\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/cc23698b486e690ea2eb873cc7596a87c74a3ba6\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/cc23698b486e690ea2eb873cc7596a87c74a3ba6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eproto_descriptor_set\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/issues/23369\"\u003e#23369\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/8d4dfdd39a7a242a9ed631a6ab2192c57dd9b9c8\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/8d4dfdd39a7a242a9ed631a6ab2192c57dd9b9c8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eCompiler\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRuby codegen: support generation of rbs files (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/issues/15633\"\u003e#15633\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/6ebdf851ba78728f0aa145d38454ed9a316fb08d\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/6ebdf851ba78728f0aa145d38454ed9a316fb08d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid collision name problems between a message named \u003ccode\u003eXyz\u003c/code\u003e and a direct sibling enum named \u003ccode\u003eXyzView\u003c/code\u003e (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/eba53e8f172b273d679759a72ce4250131ee3df1\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/eba53e8f172b273d679759a72ce4250131ee3df1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneralizing and implementing ValidateFeatureSupport for both Options and Features during proto parsing (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/ed3c57114d8e2b47cca7697ddaa50c1b3762a6b0\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/ed3c57114d8e2b47cca7697ddaa50c1b3762a6b0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix a bug with custom features outside of the \u003ccode\u003epb\u003c/code\u003e package. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/872d3ce7a4da00d7dcec33ced20cfe45235935e8\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/872d3ce7a4da00d7dcec33ced20cfe45235935e8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix import option handling when include_imports isn't set. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/9ef9e80afd9bc8379d578fe67e5ab0738728c04e\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/9ef9e80afd9bc8379d578fe67e5ab0738728c04e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix a bug in STRICT check of namespaced enums to properly check for 'reserved 1 to max' (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/1229d4adba24c0952ab85ce96bc7b7f8a1fe6d0f\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/1229d4adba24c0952ab85ce96bc7b7f8a1fe6d0f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent accidental stripping of \u003ccode\u003edebug_redact\u003c/code\u003e options via import option. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/f58b098bffa7ca4045ef7773b09151a6af5d0c28\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/f58b098bffa7ca4045ef7773b09151a6af5d0c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eC++\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd EnumerateEnumValues function. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/397d5d99db274b379d1384814074bf7df39d32f7\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/397d5d99db274b379d1384814074bf7df39d32f7\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\u003eSee full diff in \u003ca href=\"https://github.com/protocolbuffers/protobuf/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 2.5.0 to 2.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/releases\"\u003eurllib3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7.0\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been read and decompressed partially. (Reported by \u003ca href=\"https://github.com/Cycloctane\"\u003e\u003ccode\u003e@​Cycloctane\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or \u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed using the official \u003ca href=\"https://pypi.org/project/brotli/\"\u003eBrotli\u003c/a\u003e library. (Reported by \u003ca href=\"https://github.com/kimkou2024\"\u003e\u003ccode\u003e@​kimkou2024\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee GHSA-mf9v-mfxr-j63j for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip sensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when redirecting to a different host. (GHSA-qccp-gfcp-xxvc reported by \u003ca href=\"https://github.com/christos-spearbit\"\u003e\u003ccode\u003e@​christos-spearbit\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3763\"\u003eurllib3/urllib3#3763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3720\"\u003eurllib3/urllib3#3720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4979\"\u003eurllib3/urllib3#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3777\"\u003eurllib3/urllib3#3777\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed data buffered from previous partial reads. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3636\"\u003eurllib3/urllib3#3636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the response after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4967\"\u003eurllib3/urllib3#4967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eHTTPResponse.stream()\u003c/code\u003e and \u003ccode\u003eHTTPResponse.read_chunked()\u003c/code\u003e to handle \u003ccode\u003eamt=0\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3793\"\u003eurllib3/urllib3#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003e_TYPE_BODY\u003c/code\u003e type alias to include missing \u003ccode\u003eIterable[str]\u003c/code\u003e, matching the documented and runtime behavior of chunked request bodies. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3798\"\u003eurllib3/urllib3#3798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eLocationParseError\u003c/code\u003e when paths resembling schemeless URIs were passed to \u003ccode\u003eHTTPConnectionPool.urlopen()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3352\"\u003eurllib3/urllib3#3352\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eBaseHTTPResponse.readinto()\u003c/code\u003e type annotation to accept \u003ccode\u003ememoryview\u003c/code\u003e in addition to \u003ccode\u003ebytearray\u003c/code\u003e, matching the \u003ccode\u003eio.RawIOBase.readinto\u003c/code\u003e contract and enabling use with \u003ccode\u003eio.BufferedReader\u003c/code\u003e without type errors. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3764\"\u003eurllib3/urllib3#3764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.6.3\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a security issue where decompression-bomb safeguards of the streaming API were bypassed when HTTP redirects were followed. (CVE-2026-21441 reported by \u003ca href=\"https://github.com/D47A\"\u003e\u003ccode\u003e@​D47A\u003c/code\u003e\u003c/a\u003e, 8.9 High, GHSA-38jv-5279-wg99)\u003c/li\u003e\n\u003cli\u003eStarted treating \u003ccode\u003eRetry-After\u003c/code\u003e times greater than 6 hours as 6 hours by default. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3743\"\u003eurllib3/urllib3#3743\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eurllib3.connection.VerifiedHTTPSConnection\u003c/code\u003e on Emscripten. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3752\"\u003eurllib3/urllib3#3752\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.6.2\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/urllib3/urllib3/blob/main/CHANGES.rst\"\u003eurllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.7.0 (2026-05-07)\u003c/h1\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues.\nImpact was limited to specific use cases detailed in the accompanying\nadvisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been\nread and decompressed partially.\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or\n\u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed\nusing the official \u003ccode\u003eBrotli \u0026lt;https://pypi.org/project/brotli/\u0026gt;\u003c/code\u003e__ library.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee \u003ccode\u003eGHSA-mf9v-mfxr-j63j \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-mf9v-mfxr-j63j\u0026gt;\u003c/code\u003e__\nfor details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip\nsensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when\nredirecting to a different host.\n(\u003ccode\u003eGHSA-qccp-gfcp-xxvc \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc\u0026gt;\u003c/code\u003e__)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better\nvisibility of existing deprecation notices. Rescheduled the removal of\ndeprecated features to version 3.0.\n(\u003ccode\u003e[#3763](https://github.com/urllib3/urllib3/issues/3763) \u0026lt;https://github.com/urllib3/urllib3/issues/3763\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9.\n(\u003ccode\u003e[#3720](https://github.com/urllib3/urllib3/issues/3720) \u0026lt;https://github.com/urllib3/urllib3/issues/3720\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10.\n(\u003ccode\u003e[#4979](https://github.com/urllib3/urllib3/issues/4979) \u0026lt;https://github.com/urllib3/urllib3/issues/4979\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0.\n(\u003ccode\u003e[#3777](https://github.com/urllib3/urllib3/issues/3777) \u0026lt;https://github.com/urllib3/urllib3/issues/3777\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed\ndata buffered from previous partial reads.\n(\u003ccode\u003e[#3636](https://github.com/urllib3/urllib3/issues/3636) \u0026lt;https://github.com/urllib3/urllib3/issues/3636\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the\nresponse after a partial read when \u003ccode\u003ecache_content=True\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/urllib3/urllib3/commit/9a950b92d999f906b6020bb2d1076ee56cddd5d2\"\u003e\u003ccode\u003e9a950b9\u003c/code\u003e\u003c/a\u003e Release 2.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/5ec0de499b9166ca71c65ab04f2a7e4eb0d66fcc\"\u003e\u003ccode\u003e5ec0de4\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/2bdcc44d1e163fb5cc48a8662425e35e15adfe6a\"\u003e\u003ccode\u003e2bdcc44\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/f45b0df09d8620ac6ed0491eb9362c8c87b7bc2c\"\u003e\u003ccode\u003ef45b0df\u003c/code\u003e\u003c/a\u003e Fix a misleading example for \u003ccode\u003eProxyManager\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/577193ca029872384f82c133449e0935f6d8a64b\"\u003e\u003ccode\u003e577193c\u003c/code\u003e\u003c/a\u003e Switch to nightly PyPy3.11 in CI for now (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/e90af45bb006c3a452a3a21644a2681523f5c7fc\"\u003e\u003ccode\u003ee90af45\u003c/code\u003e\u003c/a\u003e Avoid infinite loop in \u003ccode\u003eHTTPResponse.read_chunked\u003c/code\u003e when \u003ccode\u003eamt=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4974\"\u003e#4974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/67ed74fdaec6659a6534621ec8e3aaaa6f976210\"\u003e\u003ccode\u003e67ed74f\u003c/code\u003e\u003c/a\u003e Bump dev dependencies (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4972\"\u003e#4972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/3abd481097b54d87b574ac7ea593c3f40938a84d\"\u003e\u003ccode\u003e3abd481\u003c/code\u003e\u003c/a\u003e Upgrade mypy to version 1.20.2 (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/2b8725dfcac4f21d4d93cc0cc3a64a33af08f890\"\u003e\u003ccode\u003e2b8725d\u003c/code\u003e\u003c/a\u003e Drop support for EOL PyPy3.10 (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/2944b2a0a6c573f5548a39cfd17196f98ee21b33\"\u003e\u003ccode\u003e2944b2a\u003c/code\u003e\u003c/a\u003e Upgrade \u003ccode\u003esetup-chrome\u003c/code\u003e and \u003ccode\u003esetup-firefox\u003c/code\u003e to fix warnings (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/urllib3/urllib3/compare/2.5.0...2.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `virtualenv` from 20.35.4 to 20.36.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/virtualenv/releases\"\u003evirtualenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e20.36.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003erelease 20.35.3 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/virtualenv/pull/2981\"\u003epypa/virtualenv#2981\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Prevent NameError when accessing _DISTUTILS_PATCH during file ov… by \u003ca href=\"https://github.com/gracetyy\"\u003e\u003ccode\u003e@​gracetyy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2982\"\u003epypa/virtualenv#2982\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade pip and fix 3.15 picking old wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2989\"\u003epypa/virtualenv#2989\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease 20.35.4 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/virtualenv/pull/2990\"\u003epypa/virtualenv#2990\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: wrong path on migrated venv by \u003ca href=\"https://github.com/sk1234567891\"\u003e\u003ccode\u003e@​sk1234567891\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2996\"\u003epypa/virtualenv#2996\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest_too_many_open_files: assert on \u003ccode\u003eerrno.EMFILE\u003c/code\u003e instead of \u003ccode\u003estrerror\u003c/code\u003e by \u003ca href=\"https://github.com/pltrz\"\u003e\u003ccode\u003e@​pltrz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3001\"\u003epypa/virtualenv#3001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: update filelock dependency version to 3.20.1 to fix CVE CVE-2025-68146 by \u003ca href=\"https://github.com/pythonhubdev\"\u003e\u003ccode\u003e@​pythonhubdev\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3002\"\u003epypa/virtualenv#3002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve EncodingWarning in tox upgrade environment 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/virtualenv/pull/3007\"\u003epypa/virtualenv#3007\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Interpreter discovery bug wrt. Microsoft Store shortcut using Latin-1 by \u003ca href=\"https://github.com/rahuldevikar\"\u003e\u003ccode\u003e@​rahuldevikar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3006\"\u003epypa/virtualenv#3006\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for PEP 440 version specifiers in the \u003ccode\u003e--python\u003c/code\u003e flag. by \u003ca href=\"https://github.com/rahuldevikar\"\u003e\u003ccode\u003e@​rahuldevikar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3008\"\u003epypa/virtualenv#3008\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/gracetyy\"\u003e\u003ccode\u003e@​gracetyy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2982\"\u003epypa/virtualenv#2982\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sk1234567891\"\u003e\u003ccode\u003e@​sk1234567891\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2996\"\u003epypa/virtualenv#2996\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pltrz\"\u003e\u003ccode\u003e@​pltrz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3001\"\u003epypa/virtualenv#3001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pythonhubdev\"\u003e\u003ccode\u003e@​pythonhubdev\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3002\"\u003epypa/virtualenv#3002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rahuldevikar\"\u003e\u003ccode\u003e@​rahuldevikar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3006\"\u003epypa/virtualenv#3006\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/virtualenv/compare/20.35.3...20.36.0\"\u003ehttps://github.com/pypa/virtualenv/compare/20.35.3...20.36.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/pypa/virtualenv/blob/main/docs/changelog.rst\"\u003evirtualenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eBugfixes - 20.36.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU vulnerabilities in app_data and lock directory creation that could be exploited via symlink attacks -\nreported by :user:\u003ccode\u003etsigouris007\u003c/code\u003e, fixed by :user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e3013\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev20.36.0 (2026-01-07)\u003c/p\u003e\n\u003chr /\u003e\n\u003ch1\u003eFeatures - 20.36.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for PEP 440 version specifiers in the \u003ccode\u003e--python\u003c/code\u003e flag. Users can now specify Python versions using\noperators like \u003ccode\u003e\u0026gt;=\u003c/code\u003e, \u003ccode\u003e\u0026lt;=\u003c/code\u003e, \u003ccode\u003e~=\u003c/code\u003e, etc. For example: \u003ccode\u003evirtualenv --python=\u0026quot;\u0026gt;=3.12\u0026quot; myenv\u003c/code\u003e \u003ccode\u003e. (:issue:\u003c/code\u003e2994`)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev20.35.4 (2025-10-28)\u003c/p\u003e\n\u003chr /\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/virtualenv/commit/d0ad11d1146e81ea74d2461be9653f1da9cf3fd1\"\u003e\u003ccode\u003ed0ad11d\u003c/code\u003e\u003c/a\u003e release 20.36.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/dec4cec5d16edaf83a00a658f32d1e032661cebc\"\u003e\u003ccode\u003edec4cec\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3013\"\u003e#3013\u003c/a\u003e from gaborbernat/fix-sec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/5fe5d38beb1273b489591a7b444f1018af2edf0a\"\u003e\u003ccode\u003e5fe5d38\u003c/code\u003e\u003c/a\u003e release 20.36.0 (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3011\"\u003e#3011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/9719376addaa710b61d9ed013774fa26f6224b4e\"\u003e\u003ccode\u003e9719376\u003c/code\u003e\u003c/a\u003e release 20.36.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/0276db6fcf8849c519d75465f659b12aefb2acd8\"\u003e\u003ccode\u003e0276db6\u003c/code\u003e\u003c/a\u003e Add support for PEP 440 version specifiers in the \u003ccode\u003e--python\u003c/code\u003e flag. (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3008\"\u003e#3008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/4f900c29044e17812981b5b98ddce45604858b7f\"\u003e\u003ccode\u003e4f900c2\u003c/code\u003e\u003c/a\u003e Fix Interpreter discovery bug wrt. Microsoft Store shortcut using Latin-1 (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/13afcc62a3444d0386c8031d0a62277a8274ab07\"\u003e\u003ccode\u003e13afcc6\u003c/code\u003e\u003c/a\u003e fix: resolve EncodingWarning in tox upgrade environment (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3007\"\u003e#3007\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/31b5d31581df3e3a7bbc55e52568b26dd01b0d57\"\u003e\u003ccode\u003e31b5d31\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/2997\"\u003e#2997\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/7c284221b4751388801355fc6ebaa2abe60427bd\"\u003e\u003ccode\u003e7c28422\u003c/code\u003e\u003c/a\u003e fix: update filelock dependency version to 3.20.1 to fix CVE CVE-2025-68146 (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/365628c544cd5498fbf0a3b6c6a8c1f41d25a749\"\u003e\u003ccode\u003e365628c\u003c/code\u003e\u003c/a\u003e test_too_many_open_files: assert on \u003ccode\u003eerrno.EMFILE\u003c/code\u003e instead of \u003ccode\u003estrerror\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/virtualenv/compare/20.35.4...20.36.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\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/EagleZhen/another-cuhk-course-planner/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/EagleZhen/another-cuhk-course-planner/pull/134","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/EagleZhen%2Fanother-cuhk-course-planner/issues/134","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/134/packages"},{"uuid":"4801935960","node_id":"PR_kwDOTA0-sc7tgZbO","number":89,"state":"closed","title":"Bump filelock from 3.29.4 to 3.29.5","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-03T08:46:30.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-03T08:46:21.000Z","updated_at":"2026-07-03T08:46:37.000Z","time_to_close":9,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"filelock","old_version":"3.29.4","new_version":"3.29.5","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.29.4 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\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/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.29.4...3.29.5\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.29.4\u0026new-version=3.29.5)](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/goutambomma24/docker-assessment/pull/89","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/goutambomma24%2Fdocker-assessment/issues/89","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/89/packages"},{"uuid":"4790544564","node_id":"PR_kwDON5W1Ac7s7T52","number":45,"state":"closed","title":"chore(deps): bump the uv group across 1 directory with 8 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-02T09:59:53.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-02T01:51:14.000Z","updated_at":"2026-07-02T10:00:03.000Z","time_to_close":29319,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv","update_count":8,"packages":[{"name":"gradio","old_version":"5.17.1","new_version":"6.15.0","repository_url":"https://github.com/gradio-app/gradio"},{"name":"filelock","old_version":"3.19.1","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"orjson","old_version":"3.11.5","new_version":"3.11.6","repository_url":"https://github.com/ijl/orjson"},{"name":"pillow","old_version":"11.3.0","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"python-multipart","old_version":"0.0.20","new_version":"0.0.31","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"starlette","old_version":"0.49.3","new_version":"1.3.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 8 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [gradio](https://github.com/gradio-app/gradio) | `5.17.1` | `6.15.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.19.1` | `3.20.3` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.5` | `3.11.6` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.3.0` | `12.2.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.20` | `0.0.31` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [starlette](https://github.com/Kludex/starlette) | `0.49.3` | `1.3.1` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n\n\nUpdates `gradio` from 5.17.1 to 6.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gradio-app/gradio/releases\"\u003egradio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egradio@6.15.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13322\"\u003e#13322\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6c48f80948abb330f201d0dac38f89a276348029\"\u003e\u003ccode\u003e6c48f80\u003c/code\u003e\u003c/a\u003e - Allow applying \u003ccode\u003egr.cache()\u003c/code\u003e to intermediate functions directly.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13367\"\u003e#13367\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5d9c9fe5ff32951309765d37da610a4833b4b694\"\u003e\u003ccode\u003e5d9c9fe\u003c/code\u003e\u003c/a\u003e - fix: upgrade handlebars to 4.7.9 (CVE-2026-33937).  Thanks \u003ca href=\"https://github.com/orbisai0security\"\u003e\u003ccode\u003e@​orbisai0security\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13408\"\u003e#13408\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6b0c8aff7a9688ad605e4ca52a083c5754fe1610\"\u003e\u003ccode\u003e6b0c8af\u003c/code\u003e\u003c/a\u003e - Markdown link fix.  Thanks \u003ca href=\"https://github.com/dawoodkhan82\"\u003e\u003ccode\u003e@​dawoodkhan82\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13366\"\u003e#13366\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/10f43e0fe187aac9594f3a9765f8addc81b63ad1\"\u003e\u003ccode\u003e10f43e0\u003c/code\u003e\u003c/a\u003e - Offload traffic to static workers and use node as the proxy.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\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\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13384\"\u003e#13384\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/feb7237d01f359d2ad4ee42d00344e61692b3b39\"\u003e\u003ccode\u003efeb7237\u003c/code\u003e\u003c/a\u003e - Isolate cookie jars in \u003ccode\u003e/proxy=\u003c/code\u003e requests so a malicious upstream Space cannot leak cookies into proxied requests to a different \u003ccode\u003e*.hf.space\u003c/code\u003e (GHSA-2mr9-9r47-px2g).  Thanks \u003ca href=\"https://github.com/xr843\"\u003e\u003ccode\u003e@​xr843\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13344\"\u003e#13344\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/563e7b7948ba2da9d900065c69301ab349648cb0\"\u003e\u003ccode\u003e563e7b7\u003c/code\u003e\u003c/a\u003e - Stop \u003ca href=\"https://github.com/gr\"\u003e\u003ccode\u003e@​gr\u003c/code\u003e\u003c/a\u003e.render from crashing with KeyError when an inner gr.Examples pops its fake-event fn.  Thanks \u003ca href=\"https://github.com/GopalGB\"\u003e\u003ccode\u003e@​GopalGB\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13379\"\u003e#13379\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/b8e8745d2f4fb156dd12d57a3f4eb2e165f20216\"\u003e\u003ccode\u003eb8e8745\u003c/code\u003e\u003c/a\u003e - fix default tool logic in gr.ImageEditor.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13363\"\u003e#13363\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0872f5eccad07a140ed5e24e3adddc661667ff9a\"\u003e\u003ccode\u003e0872f5e\u003c/code\u003e\u003c/a\u003e - add colour picker unit tests.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13383\"\u003e#13383\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/9acecd2d69653e7d0f7961fa1b63a172a9ae76ec\"\u003e\u003ccode\u003e9acecd2\u003c/code\u003e\u003c/a\u003e - Warn when gr.Tabs() has non-Tab direct children (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/9832\"\u003e#9832\u003c/a\u003e).  Thanks \u003ca href=\"https://github.com/wjddnwp29\"\u003e\u003ccode\u003e@​wjddnwp29\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13403\"\u003e#13403\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/df56862a1531fc372a3248716dc4bd07e6db1c52\"\u003e\u003ccode\u003edf56862\u003c/code\u003e\u003c/a\u003e - [js-client] close submit iterator on next/close race.  Thanks \u003ca href=\"https://github.com/hysts\"\u003e\u003ccode\u003e@​hysts\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13380\"\u003e#13380\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5d7a9bae2698c792db867f2b689fd91cee8bf4a5\"\u003e\u003ccode\u003e5d7a9ba\u003c/code\u003e\u003c/a\u003e - update pypi prompt.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13390\"\u003e#13390\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/d86903eaa5628ca0b30f27b87ec1d7e194b3eff6\"\u003e\u003ccode\u003ed86903e\u003c/code\u003e\u003c/a\u003e - Add Estonian language support and translation.  Thanks \u003ca href=\"https://github.com/paulpall\"\u003e\u003ccode\u003e@​paulpall\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13336\"\u003e#13336\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/14c88701756c5fa57e8eaeac4df1385b9601da45\"\u003e\u003ccode\u003e14c8870\u003c/code\u003e\u003c/a\u003e - Add UploadButton unit tests.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13360\"\u003e#13360\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/2887302069b2d33429ead157e7699d5502e29e0a\"\u003e\u003ccode\u003e2887302\u003c/code\u003e\u003c/a\u003e - [codex] fix component load event target.  Thanks \u003ca href=\"https://github.com/thomwolf\"\u003e\u003ccode\u003e@​thomwolf\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gradio-app/gradio/blob/main/CHANGELOG.md\"\u003egradio's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.15.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13322\"\u003e#13322\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6c48f80948abb330f201d0dac38f89a276348029\"\u003e\u003ccode\u003e6c48f80\u003c/code\u003e\u003c/a\u003e - Allow applying \u003ccode\u003egr.cache()\u003c/code\u003e to intermediate functions directly.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13367\"\u003e#13367\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5d9c9fe5ff32951309765d37da610a4833b4b694\"\u003e\u003ccode\u003e5d9c9fe\u003c/code\u003e\u003c/a\u003e - fix: upgrade handlebars to 4.7.9 (CVE-2026-33937).  Thanks \u003ca href=\"https://github.com/orbisai0security\"\u003e\u003ccode\u003e@​orbisai0security\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13408\"\u003e#13408\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6b0c8aff7a9688ad605e4ca52a083c5754fe1610\"\u003e\u003ccode\u003e6b0c8af\u003c/code\u003e\u003c/a\u003e - Markdown link fix.  Thanks \u003ca href=\"https://github.com/dawoodkhan82\"\u003e\u003ccode\u003e@​dawoodkhan82\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13366\"\u003e#13366\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/10f43e0fe187aac9594f3a9765f8addc81b63ad1\"\u003e\u003ccode\u003e10f43e0\u003c/code\u003e\u003c/a\u003e - Offload traffic to static workers and use node as the proxy.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\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\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13384\"\u003e#13384\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/feb7237d01f359d2ad4ee42d00344e61692b3b39\"\u003e\u003ccode\u003efeb7237\u003c/code\u003e\u003c/a\u003e - Isolate cookie jars in \u003ccode\u003e/proxy=\u003c/code\u003e requests so a malicious upstream Space cannot leak cookies into proxied requests to a different \u003ccode\u003e*.hf.space\u003c/code\u003e (GHSA-2mr9-9r47-px2g).  Thanks \u003ca href=\"https://github.com/xr843\"\u003e\u003ccode\u003e@​xr843\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13344\"\u003e#13344\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/563e7b7948ba2da9d900065c69301ab349648cb0\"\u003e\u003ccode\u003e563e7b7\u003c/code\u003e\u003c/a\u003e - Stop \u003ca href=\"https://github.com/gr\"\u003e\u003ccode\u003e@​gr\u003c/code\u003e\u003c/a\u003e.render from crashing with KeyError when an inner gr.Examples pops its fake-event fn.  Thanks \u003ca href=\"https://github.com/GopalGB\"\u003e\u003ccode\u003e@​GopalGB\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13379\"\u003e#13379\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/b8e8745d2f4fb156dd12d57a3f4eb2e165f20216\"\u003e\u003ccode\u003eb8e8745\u003c/code\u003e\u003c/a\u003e - fix default tool logic in gr.ImageEditor.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13363\"\u003e#13363\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0872f5eccad07a140ed5e24e3adddc661667ff9a\"\u003e\u003ccode\u003e0872f5e\u003c/code\u003e\u003c/a\u003e - add colour picker unit tests.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13383\"\u003e#13383\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/9acecd2d69653e7d0f7961fa1b63a172a9ae76ec\"\u003e\u003ccode\u003e9acecd2\u003c/code\u003e\u003c/a\u003e - Warn when gr.Tabs() has non-Tab direct children (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/9832\"\u003e#9832\u003c/a\u003e).  Thanks \u003ca href=\"https://github.com/wjddnwp29\"\u003e\u003ccode\u003e@​wjddnwp29\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13403\"\u003e#13403\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/df56862a1531fc372a3248716dc4bd07e6db1c52\"\u003e\u003ccode\u003edf56862\u003c/code\u003e\u003c/a\u003e - [js-client] close submit iterator on next/close race.  Thanks \u003ca href=\"https://github.com/hysts\"\u003e\u003ccode\u003e@​hysts\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13380\"\u003e#13380\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5d7a9bae2698c792db867f2b689fd91cee8bf4a5\"\u003e\u003ccode\u003e5d7a9ba\u003c/code\u003e\u003c/a\u003e - update pypi prompt.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13390\"\u003e#13390\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/d86903eaa5628ca0b30f27b87ec1d7e194b3eff6\"\u003e\u003ccode\u003ed86903e\u003c/code\u003e\u003c/a\u003e - Add Estonian language support and translation.  Thanks \u003ca href=\"https://github.com/paulpall\"\u003e\u003ccode\u003e@​paulpall\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13336\"\u003e#13336\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/14c88701756c5fa57e8eaeac4df1385b9601da45\"\u003e\u003ccode\u003e14c8870\u003c/code\u003e\u003c/a\u003e - Add UploadButton unit tests.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13360\"\u003e#13360\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/2887302069b2d33429ead157e7699d5502e29e0a\"\u003e\u003ccode\u003e2887302\u003c/code\u003e\u003c/a\u003e - [codex] fix component load event target.  Thanks \u003ca href=\"https://github.com/thomwolf\"\u003e\u003ccode\u003e@​thomwolf\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.14.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13275\"\u003e#13275\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/2d025c56cffb5c4eecbe47515ec771b5ecf46611\"\u003e\u003ccode\u003e2d025c5\u003c/code\u003e\u003c/a\u003e - Model3D Unit Tests.  Thanks \u003ca href=\"https://github.com/dawoodkhan82\"\u003e\u003ccode\u003e@​dawoodkhan82\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13258\"\u003e#13258\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0d089260e1f17dc0bbed85f38029f75e657782b4\"\u003e\u003ccode\u003e0d08926\u003c/code\u003e\u003c/a\u003e - add theme designer skill.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\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\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13324\"\u003e#13324\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0453450409ce6412382f8c6e5a4b5e973d80f8b8\"\u003e\u003ccode\u003e0453450\u003c/code\u003e\u003c/a\u003e - Fix gr.Slider crash for zero-width ranges.  Thanks \u003ca href=\"https://github.com/onthebed\"\u003e\u003ccode\u003e@​onthebed\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13264\"\u003e#13264\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/f65acd0f24c9b6b593b9835c7ae46282f52fdc9d\"\u003e\u003ccode\u003ef65acd0\u003c/code\u003e\u003c/a\u003e - Dialogue component unit tests.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13333\"\u003e#13333\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0e3c48549fdf4aeaff3a2f098c1d23420e4814c5\"\u003e\u003ccode\u003e0e3c485\u003c/code\u003e\u003c/a\u003e - Remove Event From Queue When Cancelled.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13326\"\u003e#13326\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/d42a1d72ad56b5155acdb4ff3bcbe7bceab39bfb\"\u003e\u003ccode\u003ed42a1d7\u003c/code\u003e\u003c/a\u003e - Fix incorrect description of js parameter in Blocks.load.  Thanks \u003ca href=\"https://github.com/AryaLolusare2712\"\u003e\u003ccode\u003e@​AryaLolusare2712\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13335\"\u003e#13335\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/953efe06fa6d0742a9dd899b846d45fbc6ea3ccf\"\u003e\u003ccode\u003e953efe0\u003c/code\u003e\u003c/a\u003e - Prevent Gallery Select Event From Triggering When Value Updated Programmatically.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.13.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13248\"\u003e#13248\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/30264b5f1e228b7b5a077cbd839c05f32e29297d\"\u003e\u003ccode\u003e30264b5\u003c/code\u003e\u003c/a\u003e - docs: Add \u0026quot;Common Patterns\u0026quot; section to Textbox component docs.  Thanks \u003ca href=\"https://github.com/yuzegong746-cmd\"\u003e\u003ccode\u003e@​yuzegong746-cmd\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13266\"\u003e#13266\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6809249801772cc9db0042eac9559b1b363bbcb9\"\u003e\u003ccode\u003e6809249\u003c/code\u003e\u003c/a\u003e - Fix typo in \u003ccode\u003eRequest.state\u003c/code\u003e serialization.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13289\"\u003e#13289\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/d6f24df6233e7882746ba6e49307a34a11101ea1\"\u003e\u003ccode\u003ed6f24df\u003c/code\u003e\u003c/a\u003e - Improve curl info.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13252\"\u003e#13252\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/e39f0284582bbac93fd01b2a5eae4ecae219f252\"\u003e\u003ccode\u003ee39f028\u003c/code\u003e\u003c/a\u003e - Add ImageSlider unit tests.  Thanks \u003ca href=\"https://github.com/pngwn\"\u003e\u003ccode\u003e@​pngwn\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13262\"\u003e#13262\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/b6b0d02bfab966e9b560402d3b7fb159d8692cea\"\u003e\u003ccode\u003eb6b0d02\u003c/code\u003e\u003c/a\u003e - Fix batched queue events losing request context.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13267\"\u003e#13267\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5fd7698f16f6cdfefb7e010b03fce60583d50214\"\u003e\u003ccode\u003e5fd7698\u003c/code\u003e\u003c/a\u003e - Fix timing and TTL comparisons bugs.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13277\"\u003e#13277\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/cab8be062deb958a718aae25175e07fb013dfd4f\"\u003e\u003ccode\u003ecab8be0\u003c/code\u003e\u003c/a\u003e - CLI/Agent API Docs.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13265\"\u003e#13265\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/8b47ccbf168d0ea721088a52fb9789c4339e7f2f\"\u003e\u003ccode\u003e8b47ccb\u003c/code\u003e\u003c/a\u003e - Skills Reorg + sync to huggingface/skills.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13286\"\u003e#13286\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/948fcb89508c1e059bd9b761f2384afcea9481af\"\u003e\u003ccode\u003e948fcb8\u003c/code\u003e\u003c/a\u003e - fix(reloading): copy \u003ccode\u003eserver\u003c/code\u003e attr before swapping blocks.  Thanks \u003ca href=\"https://github.com/cbensimon\"\u003e\u003ccode\u003e@​cbensimon\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/gradio-app/gradio/commit/0528c2c0e2c7080eeb5133f4c87b1bb38184ba47\"\u003e\u003ccode\u003e0528c2c\u003c/code\u003e\u003c/a\u003e chore: update versions (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13352\"\u003e#13352\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/6a0b417e0de228f28509c96967f165596f2b4e9f\"\u003e\u003ccode\u003e6a0b417\u003c/code\u003e\u003c/a\u003e Stabilize image editor examples test (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13418\"\u003e#13418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/51497ae8e5bab0ff5731d16df4148a024224cdf1\"\u003e\u003ccode\u003e51497ae\u003c/code\u003e\u003c/a\u003e docs: add MiniMax example to ChatInterface providers guide (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13411\"\u003e#13411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/9acecd2d69653e7d0f7961fa1b63a172a9ae76ec\"\u003e\u003ccode\u003e9acecd2\u003c/code\u003e\u003c/a\u003e Warn when gr.Tabs() has non-Tab direct children (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/9832\"\u003e#9832\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13383\"\u003e#13383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/6b0c8aff7a9688ad605e4ca52a083c5754fe1610\"\u003e\u003ccode\u003e6b0c8af\u003c/code\u003e\u003c/a\u003e Markdown link fix (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13408\"\u003e#13408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/df56862a1531fc372a3248716dc4bd07e6db1c52\"\u003e\u003ccode\u003edf56862\u003c/code\u003e\u003c/a\u003e [js-client] close submit iterator on next/close race (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13403\"\u003e#13403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/1cbeb4f07e8f53f0167e7072d8a45b7de09b9da2\"\u003e\u003ccode\u003e1cbeb4f\u003c/code\u003e\u003c/a\u003e Ci previews cdn (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13410\"\u003e#13410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/0fbdc4965bbbd649c23f0e94d085cb57c7d63438\"\u003e\u003ccode\u003e0fbdc49\u003c/code\u003e\u003c/a\u003e JS client cdn preview (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13409\"\u003e#13409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/14c88701756c5fa57e8eaeac4df1385b9601da45\"\u003e\u003ccode\u003e14c8870\u003c/code\u003e\u003c/a\u003e Add UploadButton unit tests (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13336\"\u003e#13336\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/10f43e0fe187aac9594f3a9765f8addc81b63ad1\"\u003e\u003ccode\u003e10f43e0\u003c/code\u003e\u003c/a\u003e Offload traffic to static workers and use node as the proxy (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13366\"\u003e#13366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gradio-app/gradio/compare/gradio@5.17.1...gradio@6.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.19.1 to 3.20.3\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Unix systems without O_NOFOLLOW by \u003ca href=\"https://github.com/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/464\"\u003etox-dev/filelock#464\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/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\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.20.1...3.20.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.1...3.20.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2025-68146: Fix TOCTOU symlink vulnerability in lock file creation 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/461\"\u003etox-dev/filelock#461\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.20.0...3.20.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.0...3.20.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd tox.toml to sdist by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/436\"\u003etox-dev/filelock#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate docs with example by \u003ca href=\"https://github.com/znichollscr\"\u003e\u003ccode\u003e@​znichollscr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/438\"\u003etox-dev/filelock#438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd 3.14 support and drop 3.9 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/448\"\u003etox-dev/filelock#448\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/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/436\"\u003etox-dev/filelock#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/znichollscr\"\u003e\u003ccode\u003e@​znichollscr\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/438\"\u003etox-dev/filelock#438\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.19.1...3.20.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.19.1...3.20.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2e7d4046b6a2b375a573bcfbad21827b99f8939\"\u003e\u003ccode\u003ef2e7d40\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/50888548eb2f008d372e71f2835a47851ab83836\"\u003e\u003ccode\u003e5088854\u003c/code\u003e\u003c/a\u003e Support Unix systems without O_NOFOLLOW (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/377f62251d7cdf30768cc9ee1eb31cea1551c71b\"\u003e\u003ccode\u003e377f622\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/460\"\u003e#460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4724d7f8c3393ec1f048c93933e6e3e6ec321f0e\"\u003e\u003ccode\u003e4724d7f\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in lock file creation (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/461\"\u003e#461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/cb69414a2327cf0a9887e12054d1dc112ee700af\"\u003e\u003ccode\u003ecb69414\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/459\"\u003e#459\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0769294f14a6c62eea64741722f7acef5386b4cd\"\u003e\u003ccode\u003e0769294\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/458\"\u003e#458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/414193a188892bd376eb5c56eb45a9cf8ecc9284\"\u003e\u003ccode\u003e414193a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/457\"\u003e#457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1456797beb94ad59e5627462ad29f7ed3a966626\"\u003e\u003ccode\u003e1456797\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/456\"\u003e#456\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8d6bf90af313ac7fd6e41ef2b715d91dd6858f5c\"\u003e\u003ccode\u003e8d6bf90\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/455\"\u003e#455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.19.1...3.20.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `orjson` from 3.11.5 to 3.11.6\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.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\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/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.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\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/ijl/orjson/commit/ec02024c3837255064f248c0d2d331319b75e9ad\"\u003e\u003ccode\u003eec02024\u003c/code\u003e\u003c/a\u003e 3.11.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/d58168733189f82b3fd0c058dff73e05d09202e6\"\u003e\u003ccode\u003ed581687\u003c/code\u003e\u003c/a\u003e build, clippy misc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/4105b29b2275f200f6fae01349bef02ccf1bc2e2\"\u003e\u003ccode\u003e4105b29\u003c/code\u003e\u003c/a\u003e writer::num\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/62bb185b70785ded49c79c26f8c9781f1e6fe370\"\u003e\u003ccode\u003e62bb185\u003c/code\u003e\u003c/a\u003e Fix sporadic crash on serializing object close\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/d860078a973f44401265c5c4ad12a7dbe4f839ad\"\u003e\u003ccode\u003ed860078\u003c/code\u003e\u003c/a\u003e PyRef idiom refactors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/343ae2f148197918aba9f8562db42c364620e4b8\"\u003e\u003ccode\u003e343ae2f\u003c/code\u003e\u003c/a\u003e Deserializer, Utf8Buffer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/7835f58d1c56947d1cf7a18acdfc07a2bca9b0f2\"\u003e\u003ccode\u003e7835f58\u003c/code\u003e\u003c/a\u003e PyBytesRef and other input refactor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/71e0516424ce1e11613eb1780f18e8cde83989fd\"\u003e\u003ccode\u003e71e0516\u003c/code\u003e\u003c/a\u003e PyStrRef\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/1096df42dc585fde837ed0c930a346f5ef7dbb94\"\u003e\u003ccode\u003e1096df4\u003c/code\u003e\u003c/a\u003e MSRV 1.89\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/b718e75b8ba18a707c2b44b6de14d52547573771\"\u003e\u003ccode\u003eb718e75\u003c/code\u003e\u003c/a\u003e Drop support for python3.9\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ijl/orjson/compare/3.11.5...3.11.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 11.3.0 to 12.2.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.2.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9522\"\u003e#9522\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd loader plugins: AMOS abk, Atari Degas, 40+ more obscure formats via Netpbm \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9482\"\u003e#9482\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9515\"\u003e#9515\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eJeffrey A. Clark -\u0026gt; Jeffrey 'Alex' Clark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9513\"\u003e#9513\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 release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9394\"\u003e#9394\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9419\"\u003e#9419\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9456\"\u003e#9456\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9467\"\u003e#9467\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 Amiga Workbench .info loader to 3rd party plugins list \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9459\"\u003e#9459\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMerge PFM documentation into PPM \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9434\"\u003e#9434\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 macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9431\"\u003e#9431\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix CVE number \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9430\"\u003e#9430\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\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 xz to 5.8.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9523\"\u003e#9523\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 libjpeg-turbo to 3.1.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9507\"\u003e#9507\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 libpng to 1.6.56 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9499\"\u003e#9499\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 freetype to 2.14.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9485\"\u003e#9485\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libavif to 1.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9479\"\u003e#9479\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 13.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9461\"\u003e#9461\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 Ghostscript to 10.7.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9469\"\u003e#9469\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 harfbuzz to 13.0.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9453\"\u003e#9453\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 libavif to 1.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9460\"\u003e#9460\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 freetype to 2.14.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9449\"\u003e#9449\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 actions/download-artifact action to v8 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9451\"\u003e#9451\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.55 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9425\"\u003e#9425\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\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCleanup .spider extension in the same test where it is added \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9517\"\u003e#9517\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRun tests in parallel via tox for 3.5x speedup \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9516\"\u003e#9516\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eEnable colour in CI logs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9486\"\u003e#9486\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Ghostscript to 10.7.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9469\"\u003e#9469\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eSimplify TGA test code \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9477\"\u003e#9477\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 tests to check for ValueError when encoding an empty image \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9464\"\u003e#9464\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpgrade CI from \u003ccode\u003emacos-15-intel\u003c/code\u003e to \u003ccode\u003emacos-26-intel\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9454\"\u003e#9454\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd check-case-conflict hook \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9446\"\u003e#9446\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eSpecify platform when pulling docker image \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9440\"\u003e#9440\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eGHA: Cache libavif and webp builds for Ubuntu \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9437\"\u003e#9437\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9431\"\u003e#9431\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\u003eOther changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck calloc return value \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9527\"\u003e#9527\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCheck all allocs in the Arrow tree \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9488\"\u003e#9488\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eReject non-numeric elements inside list coords \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9526\"\u003e#9526\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove variable declaration inside define \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9525\"\u003e#9525\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/3c41c095064200a02672d89cc5ff629eaf4b0d4f\"\u003e\u003ccode\u003e3c41c09\u003c/code\u003e\u003c/a\u003e 12.2.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/cdaa29eb520291c4f1fb50fb71ae46502d41e460\"\u003e\u003ccode\u003ecdaa29e\u003c/code\u003e\u003c/a\u003e Check calloc return value (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9527\"\u003e#9527\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/585b2f5a780722c8a5bfffb3a40f7f42e8a205be\"\u003e\u003ccode\u003e585b2f5\u003c/code\u003e\u003c/a\u003e Check calloc return value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ecf011ea15991d4cebacd946e58270cc30b0f2c1\"\u003e\u003ccode\u003eecf011e\u003c/code\u003e\u003c/a\u003e Check all allocs in the Arrow tree (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9488\"\u003e#9488\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/cf6de8ca9b23e714aa5310e1c791eda66fc0b670\"\u003e\u003ccode\u003ecf6de8c\u003c/code\u003e\u003c/a\u003e Reject non-numeric elements inside list coords (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9526\"\u003e#9526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ffdcede6516b28d9667c92929854023d17048b64\"\u003e\u003ccode\u003effdcede\u003c/code\u003e\u003c/a\u003e Update 12.2.0 release notes (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9522\"\u003e#9522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/7929d7760fe5a307ba5ae6eabdf70ae4486b147c\"\u003e\u003ccode\u003e7929d77\u003c/code\u003e\u003c/a\u003e Added security release notes (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/149\"\u003e#149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c4f7aa5dfb4dbd1242978ac235e01b9934ec6d3c\"\u003e\u003ccode\u003ec4f7aa5\u003c/code\u003e\u003c/a\u003e Added security release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/22cdb5f2e4b15250c06563b1124ac1667342712f\"\u003e\u003ccode\u003e22cdb5f\u003c/code\u003e\u003c/a\u003e Move variable declaration inside define (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9525\"\u003e#9525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/fc15b3b01899408ec989d7804c5283e13802d057\"\u003e\u003ccode\u003efc15b3b\u003c/code\u003e\u003c/a\u003e Resize tall images vertically first (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9524\"\u003e#9524\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/11.3.0...12.2.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.20 to 0.0.31\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.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch 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/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating 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/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form 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/297\"\u003eKludex/python-multipart#297\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.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator 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/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\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/291\"\u003eKludex/python-multipart#291\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.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.29\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/manunio\"\u003e\u003ccode\u003e@​manunio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003eKludex/python-multipart#270\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.28...0.0.29\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.28...0.0.29\u003c/a\u003e\u003c/p\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\u003ch2\u003eVersion 0.0.27\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePass parse offsets via constructors 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/268\"\u003eKludex/python-multipart#268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd multipart header limits 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/267\"\u003eKludex/python-multipart#267\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.26...0.0.27\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.26\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before first multipart boundary 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/262\"\u003eKludex/python-multipart#262\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing boundary 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/259\"\u003eKludex/python-multipart#259\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.25...0.0.26\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.25...0.0.26\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.25\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eApply Apache-2.0 properly 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/247\"\u003eKludex/python-multipart#247\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle multipart headers case-insensitively 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/252\"\u003eKludex/python-multipart#252\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/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.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.29 (2026-05-17)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003e#270\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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\u003ch2\u003e0.0.27 (2026-04-27)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd multipart header limits \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/267\"\u003e#267\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePass parse offsets via constructors \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/268\"\u003e#268\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.26 (2026-04-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before the first multipart boundary more efficiently \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/262\"\u003e#262\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing multipart boundary \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/259\"\u003e#259\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.25 (2026-04-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd MIME content type info to \u003ccode\u003eFile\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/143\"\u003e#143\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eHandle CTE values case-insensitively \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/258\"\u003e#258\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eRemove custom \u003ccode\u003eFormParser\u003c/code\u003e classes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/257\"\u003e#257\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eUPLOAD_DELETE_TMP\u003c/code\u003e to \u003ccode\u003eFormParser\u003c/code\u003e config \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/254\"\u003e#254\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003efield_end\u003c/code\u003e for trailing bare field names on finalize \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/230\"\u003e#230\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eHandle multipart headers case-insensitively \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/252\"\u003e#252\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eApply Apache-2.0 properly \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/247\"\u003e#247\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.24 (2026-04-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate \u003ccode\u003echunk_size\u003c/code\u003e in \u003ccode\u003eparse_form()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/244\"\u003e#244\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.23 (2026-04-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove unused \u003ccode\u003etrust_x_headers\u003c/code\u003e parameter and \u003ccode\u003eX-File-Name\u003c/code\u003e fallback \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/196\"\u003e#196\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eReturn processed length from \u003ccode\u003eQuerystringParser._internal_write\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/229\"\u003e#229\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCleanup metadata dunders from \u003ccode\u003e__init__.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/227\"\u003e#227\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/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/9d3ead568a259f222cff6425262ff63e88d930d4\"\u003e\u003ccode\u003e9d3ead5\u003c/code\u003e\u003c/a\u003e Version 0.0.30 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/292\"\u003e#292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/3506c15ce99cb62faf2d5ceb3c4c1e5800cb843d\"\u003e\u003ccode\u003e3506c15\u003c/code\u003e\u003c/a\u003e Ignore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/291\"\u003e#291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/d69df35cd2cad9c72794c2c340db646afae957d8\"\u003e\u003ccode\u003ed69df35\u003c/code\u003e\u003c/a\u003e Treat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/1e6ff9740b09fb439755f30e2b0e2ada1d297325\"\u003e\u003ccode\u003e1e6ff97\u003c/code\u003e\u003c/a\u003e Bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.20...0.0.31\"\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.33.0\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.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\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\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\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/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\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#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\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\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc 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/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/753fd08c5eacce0aa0df73fe47e49525c67e0a29\"\u003e\u003ccode\u003e753fd08\u003c/code\u003e\u003c/a\u003e docs: fix FAQ grammar in httplib2 example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/774a0b837a194ee885d4fdd9ca947900cc3daf71\"\u003e\u003ccode\u003e774a0b8\u003c/code\u003e\u003c/a\u003e docs(socks): same block as other sections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/9c72a41bec8597f948c9d8caa5dc3f12273b3303\"\u003e\u003ccode\u003e9c72a41\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.33.0 to 4.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/ebf71906798ec82f34e07d3168f8b8aecaf8a3be\"\u003e\u003ccode\u003eebf7190\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.32.0 to 4.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0e4ae38f0c93d4f92a96c774bd52c069d12a4798\"\u003e\u003ccode\u003e0e4ae38\u003c/code\u003e\u003c/a\u003e docs: exclude Response.is_permanent_redirect from API docs (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7244\"\u003e#7244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d568f47278492e630cc990a259047c67991d007a\"\u003e\u003ccode\u003ed568f47\u003c/code\u003e\u003c/a\u003e docs: clarify Quickstart POST example (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6960\"\u003e#6960\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `starlette` from 0.49.3 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/Kludex/starlette/releases\"\u003estarlette's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eStarletteDeprecationWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\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/starlette/pull/3119\"\u003eKludex/starlette#3119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce \u003ccode\u003emax_fields\u003c/code\u003e and \u003ccode\u003emax_part_size\u003c/code\u003e in \u003ccode\u003eFormParser\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/starlette/pull/3329\"\u003eKludex/starlette#3329\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce \u003ccode\u003eFormParser\u003c/code\u003e limits in parser callbacks 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/starlette/pull/3331\"\u003eKludex/starlette#3331\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/starlette/compare/1.3.0...1.3.1\"\u003ehttps://github.com/Kludex/starlette/compare/1.3.0...1.3.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eClamp oversized suffix ranges in \u003ccode\u003eFileResponse\u003c/code\u003e by \u003ca href=\"https://github.com/jiyujie2006\"\u003e\u003ccode\u003e@​jiyujie2006\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3307\"\u003eKludex/starlette#3307\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOSError\u003c/code\u003e alongside \u003ccode\u003eMultiPartException\u003c/code\u003e when closing temp files by \u003ca href=\"https://github.com/N3XT3R1337\"\u003e\u003ccode\u003e@​N3XT3R1337\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3191\"\u003eKludex/starlette#3191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ehttpx2\u003c/code\u003e to the \u003ccode\u003efull\u003c/code\u003e 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/starlette/pull/3323\"\u003eKludex/starlette#3323\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust testclient typing and warnings by \u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3322\"\u003eKludex/starlette#3322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix IndexError in URL.replace() on a URL with no authority by \u003ca href=\"https://github.com/LeSingh1\"\u003e\u003ccode\u003e@​LeSingh1\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3317\"\u003eKludex/starlette#3317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAnnotate URLPath protocol parameter with Literal by \u003ca href=\"https://github.com/Chang-LeHung\"\u003e\u003ccode\u003e@​Chang-LeHung\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3285\"\u003eKludex/starlette#3285\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eavoid collapsing exception groups from user code by \u003ca href=\"https://github.com/graingert\"\u003e\u003ccode\u003e@​graingert\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/2830\"\u003eKludex/starlette#2830\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eremoveprefix\u003c/code\u003e to strip weak ETag indicator in \u003ccode\u003eis_not_modified\u003c/code\u003e by \u003ca href=\"https://github.com/gnosyslambda\"\u003e\u003ccode\u003e@​gnosyslambda\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3193\"\u003eKludex/starlette#3193\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBuild \u003ccode\u003erequest.url\u003c/code\u003e from structured components 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/starlette/pull/3326\"\u003eKludex/starlette#3326\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/jiyujie2006\"\u003e\u003ccode\u003e@​jiyujie2006\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3307\"\u003eKludex/starlette#3307\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/N3XT3R1337\"\u003e\u003ccode\u003e@​N3XT3R1337\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3191\"\u003eKludex/starlette#3191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/leestana01\"\u003e\u003ccode\u003e@​leestana01\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3319\"\u003eKludex/starlette#3319\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/LeSingh1\"\u003e\u003ccode\u003e@​LeSingh1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3317\"\u003eKludex/starlette#3317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3204\"\u003eKludex/starlette#3204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Chang-LeHung\"\u003e\u003ccode\u003e@​Chang-LeHung\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3285\"\u003eKludex/starlette#...\n\n_Description has been truncated_","html_url":"https://github.com/veralvx/audiotame/pull/45","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/veralvx%2Faudiotame/issues/45","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/45/packages"},{"uuid":"4773493139","node_id":"PR_kwDOS0SQ6s7sDaBu","number":19,"state":"open","title":"chore(deps): bump the python-minor-and-patch group with 7 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-06-30T03:45:35.000Z","updated_at":"2026-06-30T03:53:08.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":7,"packages":[{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"filelock","old_version":"3.29.1","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"pyodps","old_version":"0.12.6","new_version":"0.13.0","repository_url":"https://github.com/aliyun/aliyun-odps-python-sdk"},{"name":"sqlglot","old_version":"30.9.0","new_version":"30.12.0","repository_url":"https://github.com/tobymao/sqlglot"},{"name":"sentence-transformers","old_version":"5.5.1","new_version":"5.6.0","repository_url":"https://github.com/huggingface/sentence-transformers"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"ruff","old_version":"0.15.16","new_version":"0.15.20","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group with 7 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.1` | `3.29.4` |\n| [pyodps](https://github.com/aliyun/aliyun-odps-python-sdk) | `0.12.6` | `0.13.0` |\n| [sqlglot](https://github.com/tobymao/sqlglot) | `30.9.0` | `30.12.0` |\n| [sentence-transformers](https://github.com/huggingface/sentence-transformers) | `5.5.1` | `5.6.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.16` | `0.15.20` |\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\u003eUnreleased\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\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 `filelock` from 3.29.1 to 3.29.4\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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.1...3.29.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/85e73d7f0575e30a3d94a00452255e381c7b8eb3\"\u003e\u003ccode\u003e85e73d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): publish from release.yaml on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f86dcb1abca36bb02b65232d411d7e8dce8569e6\"\u003e\u003ccode\u003ef86dcb1\u003c/code\u003e\u003c/a\u003e Release 3.29.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/643bdbe89bff3c61e29d14d7657d045bb89ade6d\"\u003e\u003ccode\u003e643bdbe\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): restore release environment on tag job (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/559\"\u003e#559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7a8f74a904cf7d98b6baf24eb37175d128a5f818\"\u003e\u003ccode\u003e7a8f74a\u003c/code\u003e\u003c/a\u003e validate pid range in _parse_lock_holder (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/556\"\u003e#556\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d1d49a0b232a6d904ff29b22213834df75ffc59b\"\u003e\u003ccode\u003ed1d49a0\u003c/code\u003e\u003c/a\u003e 🔧 ci(release): publish to PyPI on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b37e162e316ec0ef6e5b8c37a1c04bdaaa411487\"\u003e\u003ccode\u003eb37e162\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/558\"\u003e#558\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d9216dea26f31d369c7d3422bfe14c08b51232f1\"\u003e\u003ccode\u003ed9216de\u003c/code\u003e\u003c/a\u003e Release 3.29.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.1...3.29.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyodps` from 0.12.6 to 0.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/releases\"\u003epyodps's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.13.0\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eStorage API v2\u003c/strong\u003e - Introduces the new Storage API v2 interface for interacting with MaxCompute storage.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVector type support\u003c/strong\u003e - Adds full vector data type support including pure Python type definitions, tunnel I/O, and Arrow tunnel round-trip handling.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBlobWriter and BlobReference for Python UDF\u003c/strong\u003e - Provides stub classes for blob operations in Python UDFs.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFree-threaded Python support (beta)\u003c/strong\u003e - Introduces initial support for free-threaded Python (PEP 703), allowing PyODPS to run in environments without the GIL.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDrop support of Python 2.7\u003c/strong\u003e - Support of Python 2.7 is dropped and compatibility modules are removed. Code is changed to accept new syntax of Python\u0026gt;=3.7.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTry obtaining task statuses when task results are ready\u003c/strong\u003e - Improves task status retrieval by attempting to obtain statuses when results become available. This can help obtaining results under MaxQA.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAdd missing tunnel session arguments\u003c/strong\u003e - Adds previously missing arguments to tunnel session creation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAdd fallbacks for enums\u003c/strong\u003e - Adds fallback handling for enum values to improve robustness.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eUse struct for timestamps from instance tunnel\u003c/strong\u003e - Improves timestamp handling in instance tunnel by using struct-based parsing.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFix potential exponential recursion in PyODPS DataFrame\u003c/strong\u003e - Introduces caching for ExprProxy objects to avoid exponential recursion.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRemove monkey patch of minidom writexml method\u003c/strong\u003e - Fixes incompatibility of the patch in Python\u0026gt;=3.13.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFix writing upsert table with random primary key location\u003c/strong\u003e - Fixes cython version of RecordHasher to produce correct hash keys.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eCompatibility Notes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 2.7 support dropped\u003c/strong\u003e - PyODPS v0.13.0 no longer supports Python 2.7. The minimum supported Python version is now 3.7. Please do not upgrade if you want to stay with Python 2.7. DataWorks users who are using PyODPS with Python 2.7 will stay with PyODPS 0.12.6.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMars removed\u003c/strong\u003e - Mars integration support has been removed. Users relying on this should switch to MaxFrame or migrate to alternative solutions before upgrading.\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/aliyun/aliyun-odps-python-sdk/commit/558462b8d61b43c73016837f32c68b2ddfad2cdf\"\u003e\u003ccode\u003e558462b\u003c/code\u003e\u003c/a\u003e Update docs (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/327\"\u003e#327\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/d6f25cdc395396f390460f8d376a3d50af8fdaa3\"\u003e\u003ccode\u003ed6f25cd\u003c/code\u003e\u003c/a\u003e Enable using ARM ubuntu image to build wheel (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/3c6d6063b6b3ddffa324b225e626b8c1723d2641\"\u003e\u003ccode\u003e3c6d606\u003c/code\u003e\u003c/a\u003e Releases v0.13.0 (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/325\"\u003e#325\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/de30fead0f81d83e420971637696f47de8c5c87f\"\u003e\u003ccode\u003ede30fea\u003c/code\u003e\u003c/a\u003e Sync code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/323\"\u003e#323\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/435d40194e29b5724a5e29bc381a4c2e3fc988a7\"\u003e\u003ccode\u003e435d401\u003c/code\u003e\u003c/a\u003e Sync storage api v2 code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/321\"\u003e#321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/0fb703e47402a9ee9039a3efe0d8d2e2fa4d5f91\"\u003e\u003ccode\u003e0fb703e\u003c/code\u003e\u003c/a\u003e Sync tunnel code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/320\"\u003e#320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/0a86431f762a6834588730a9fca7bee6bc71f438\"\u003e\u003ccode\u003e0a86431\u003c/code\u003e\u003c/a\u003e Sync code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/319\"\u003e#319\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/59267d926968dec56c05b349f3221310bb42729e\"\u003e\u003ccode\u003e59267d9\u003c/code\u003e\u003c/a\u003e Sync code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/315\"\u003e#315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/compare/v0.12.6...v0.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlglot` from 30.9.0 to 30.12.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/64e268a5d95cd84a87ad74ef569fc9bf356fd3fb\"\u003e\u003ccode\u003e64e268a\u003c/code\u003e\u003c/a\u003e fix(clickhouse)!: support arrayMap and arrayFilter roundtrips [CODEX] (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7794\"\u003e#7794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/b1a0070ca9989e76e30ab512f206423d5d6de0bc\"\u003e\u003ccode\u003eb1a0070\u003c/code\u003e\u003c/a\u003e Fix(optimizer)!: resolve lateral subquery columns (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7802\"\u003e#7802\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/7a0a9abc516fd3280382f26b89adfc1547c10098\"\u003e\u003ccode\u003e7a0a9ab\u003c/code\u003e\u003c/a\u003e feat(snowflake): support invoking dynamically-resolved functions via `IDENTIF...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/075eaf5d8a67e24f85d282f5b8f9ba912f21025f\"\u003e\u003ccode\u003e075eaf5\u003c/code\u003e\u003c/a\u003e feat(optimizer)!: annotate DIV for Hive/Spark/DBX (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7788\"\u003e#7788\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/523f7c2551906ffc37a03b8dae0fea3a0fca783d\"\u003e\u003ccode\u003e523f7c2\u003c/code\u003e\u003c/a\u003e feat(snowflake): support properties before column definitions in \u003ccode\u003eCREATE\u003c/code\u003e sta...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/9f18b7705833c54478ce990c3319d2153ecb8be9\"\u003e\u003ccode\u003e9f18b77\u003c/code\u003e\u003c/a\u003e feat(parser): support \u003ccode\u003eCALLED ON NULL INPUT\u003c/code\u003e function property (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7792\"\u003e#7792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/ca9d1656ef775d756d4299fe759554784e3cee24\"\u003e\u003ccode\u003eca9d165\u003c/code\u003e\u003c/a\u003e Define bigquery type hint for date funcs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/91a781b9cbe5fb1a3f401464b6ef76aab0715188\"\u003e\u003ccode\u003e91a781b\u003c/code\u003e\u003c/a\u003e fix(annotate_types)!: coerce bigquery date function arg types [CLAUDE] (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7790\"\u003e#7790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/e16a179a4226e7049e050f5cc86d63ace9c60b40\"\u003e\u003ccode\u003ee16a179\u003c/code\u003e\u003c/a\u003e fix(optimizer): handle non-commutative subtraction in simplify_equality (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7791\"\u003e#7791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/eba0b304f179484ad7b5e0ae3467128abadae2f9\"\u003e\u003ccode\u003eeba0b30\u003c/code\u003e\u003c/a\u003e Sync w/ integration tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tobymao/sqlglot/compare/v30.9.0...v30.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentence-transformers` from 5.5.1 to 5.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/sentence-transformers/releases\"\u003esentence-transformers's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.6.0 - Fixes for Causal LM Rerankers, Hard-Negative Mining, and More\u003c/h2\u003e\n\u003cp\u003eThis minor version is a correctness- and robustness-focused release. It fixes a silent scoring bug for causal-LM rerankers, corrects several hard-negative mining and GIST loss edge cases, restores TSDAE on \u003ccode\u003etransformers\u003c/code\u003e v5, and adds Apple Silicon (MPS) support for the cached losses.\u003c/p\u003e\n\u003cp\u003eThe headline fix affects chat-template models that read the final token position, i.e. causal-LM rerankers (like \u003ccode\u003eQwen3-Reranker\u003c/code\u003e) and last-token-pooling embedders: when an over-long input was truncated, the chat template's trailing suffix (e.g. the assistant prefill the model scores from) was silently dropped, producing wrong scores with no error. There's also a forward-looking deprecation: loading local custom code without \u003ccode\u003etrust_remote_code=True\u003c/code\u003e now warns, and will require it from v6.0.\u003c/p\u003e\n\u003cp\u003eInstall this version with\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e# Training + Inference\r\npip install sentence-transformers[train]==5.6.0\r\n\u003ch1\u003eInference only, use one of:\u003c/h1\u003e\n\u003cp\u003epip install sentence-transformers==5.6.0\npip install sentence-transformers[onnx-gpu]==5.6.0\npip install sentence-transformers[onnx]==5.6.0\npip install sentence-transformers[openvino]==5.6.0\u003c/p\u003e\n\u003ch1\u003eMultimodal dependencies (optional):\u003c/h1\u003e\n\u003cp\u003epip install sentence-transformers[image]==5.6.0\npip install sentence-transformers[audio]==5.6.0\npip install sentence-transformers[video]==5.6.0\u003c/p\u003e\n\u003ch1\u003eOr combine as needed:\u003c/h1\u003e\n\u003cp\u003epip install sentence-transformers[train,onnx,image]==5.6.0\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003ch2\u003eFixed silently wrong scores when truncation drops chat-template suffixes (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3787\"\u003e#3787\u003c/a\u003e)\u003c/h2\u003e\n\u003cp\u003eChat-template models render the full conversation to a flat string before tokenizing, so when the rendered input is longer than the tokenizer's \u003ccode\u003emodel_max_length\u003c/code\u003e, the tokenizer truncates it from the right and drops the template's trailing suffix: the fixed tokens a template appends \u003cem\u003eafter\u003c/em\u003e the content, e.g. a prompt, instruction, \u003ccode\u003e[/INST]\u003c/code\u003e, or a trailing EOS. For models that read the final token position, this silently corrupted the result:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ecausal-LM rerankers (e.g. \u003ccode\u003eQwen/Qwen3-Reranker-0.6B\u003c/code\u003e) score a pair from the last token's \u003ccode\u003eyes\u003c/code\u003e/\u003ccode\u003eno\u003c/code\u003e logits, and\u003c/li\u003e\n\u003cli\u003elast-token-pooling embedders read the final hidden state.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhen the suffix was truncated away, that final position landed mid-document instead of after the prefill, so the score or embedding came from the wrong place.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eTransformer.preprocess\u003c/code\u003e now detects when truncation drops the suffix and splices it back onto the tail of each truncated row. Because the fix lives in the shared base \u003ccode\u003eTransformer\u003c/code\u003e, it applies across \u003ccode\u003eSentenceTransformer\u003c/code\u003e, \u003ccode\u003eCrossEncoder\u003c/code\u003e, and \u003ccode\u003eSparseEncoder\u003c/code\u003e. It's enabled by default and saved to the model configuration. Pass \u003ccode\u003eprocessing_kwargs={\u0026quot;chat_template\u0026quot;: {\u0026quot;restore_suffix\u0026quot;: False}}\u003c/code\u003e to opt back into raw truncation.\u003c/p\u003e\n\u003ch2\u003eHard-negative mining and GIST loss correctness (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3821\"\u003e#3821\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3817\"\u003e#3817\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3816\"\u003e#3816\u003c/a\u003e)\u003c/h2\u003e\n\u003cp\u003eA trio of correctness and scalability fixes for hard-negative mining and the GIST losses:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSign-independent relative margin: \u003ccode\u003emine_hard_negatives(relative_margin=...)\u003c/code\u003e and the \u003ccode\u003emargin_strategy=\u0026quot;relative\u0026quot;\u003c/code\u003e branch of \u003ccode\u003eGISTEmbedLoss\u003c/code\u003e / \u003ccode\u003eCachedGISTEmbedLoss\u003c/code\u003e used a multiplicative threshold (\u003ccode\u003epositive * (1 - margin)\u003c/code\u003e) that only behaves correctly when the positive-pair similarity is positive. When that similarity was negative, the threshold moved the wrong way and let through false negatives: candidates \u003cem\u003emore\u003c/em\u003e similar to the anchor than the true positive. The threshold is now \u003ccode\u003epositive - |positive| * margin\u003c/code\u003e, identical to before for positive scores but correct for negative ones.\u003c/li\u003e\n\u003cli\u003eDistributed positive masking in the GIST losses: with \u003ccode\u003egather_across_devices=True\u003c/code\u003e and a non-zero \u003ccode\u003emargin\u003c/code\u003e, the false-negative suppression mask protected the wrong columns on ranks beyond the first (it ignored the per-rank offset into the gathered batch), which set the true positive's logit to \u003ccode\u003e-inf\u003c/code\u003e and produced a \u003ccode\u003e+inf\u003c/code\u003e loss. The mask now accounts for the cross-rank offset, so multi-GPU GIST training stays finite.\u003c/li\u003e\n\u003cli\u003eMemory-bounded mining without FAISS: \u003ccode\u003emine_hard_negatives(use_faiss=False)\u003c/code\u003e (the default) materialized the full \u003ccode\u003e(queries × corpus)\u003c/code\u003e similarity matrix at once, which could OOM on large corpora. It now batches over the query axis (controlled by \u003ccode\u003efaiss_batch_size\u003c/code\u003e, default 16384), bounding peak memory while producing identical results.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTSDAE weight tying restored on \u003ccode\u003etransformers\u003c/code\u003e v5 (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003etransformers\u003c/code\u003e v5 removed the private \u003ccode\u003ePreTrainedModel._tie_encoder_decoder_weights\u003c/code\u003e helper that \u003ccode\u003eDenoisingAutoEncoderLoss\u003c/code\u003e (TSDAE) used to tie its separate encoder and decoder. As a stopgap, v5.5 raised a \u003ccode\u003eRuntimeError\u003c/code\u003e for the default \u003ccode\u003etie_encoder_decoder=True\u003c/code\u003e on \u003ccode\u003etransformers \u0026gt;= 5.0.0\u003c/code\u003e, effectively breaking TSDAE there unless you pinned an older \u003ccode\u003etransformers\u003c/code\u003e or disabled tying. TSDAE now ships its own tying routine that shares storage between encoder and decoder, so it works on both \u003ccode\u003etransformers\u003c/code\u003e \u0026lt;5 and \u0026gt;=5 with the default settings.\u003c/p\u003e\n\u003ch2\u003eDeprecation: loading local custom code without \u003ccode\u003etrust_remote_code\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3807\"\u003e#3807\u003c/a\u003e)\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/huggingface/sentence-transformers/commit/9c73df3143e97598938a1640d737d3f0f11878e5\"\u003e\u003ccode\u003e9c73df3\u003c/code\u003e\u003c/a\u003e Release v5.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/222b0529b93b15f191b6f86b25350be4d226361e\"\u003e\u003ccode\u003e222b052\u003c/code\u003e\u003c/a\u003e [fix] Don't override device_map placement with the device argument (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3823\"\u003e#3823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/a38a6bf16f50347c100c515fed64e2d8e75bf290\"\u003e\u003ccode\u003ea38a6bf\u003c/code\u003e\u003c/a\u003e Fix causal LM reranker scoring when max_length truncates chat-template suffix...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/18121031ece5ad8f4676127c6693f517c113782a\"\u003e\u003ccode\u003e1812103\u003c/code\u003e\u003c/a\u003e [fix] Make relative margin sign-independent in mining and GIST losses (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3821\"\u003e#3821\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/ae1acc3fb2aa2004577b297eb4a915ce7a03316a\"\u003e\u003ccode\u003eae1acc3\u003c/code\u003e\u003c/a\u003e Warn when loading local custom code without trust_remote_code (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3807\"\u003e#3807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/429cf5d424869c7aba629ded61e93b2788921677\"\u003e\u003ccode\u003e429cf5d\u003c/code\u003e\u003c/a\u003e [fix] Support MPS in the cached losses' RandContext (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3812\"\u003e#3812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/77fdbfff17c476190f3bb09436e91280fe27b247\"\u003e\u003ccode\u003e77fdbff\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003efix\u003c/code\u003e] fix \u003ccode\u003eMPS\u003c/code\u003e errors (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3818\"\u003e#3818\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/bfba988a1ebc5717b7c52af597e43dba86b4a590\"\u003e\u003ccode\u003ebfba988\u003c/code\u003e\u003c/a\u003e [fix] Fix positive masking in GIST losses with multi-GPU + gather_across_devi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/29e382b56077f5ade739737d14878357345b4e7e\"\u003e\u003ccode\u003e29e382b\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003edocs\u003c/code\u003e] Fix doc build problems (part 1) (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3811\"\u003e#3811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/d16e6bfacf5b00143a93d007fbb711d8095b297b\"\u003e\u003ccode\u003ed16e6bf\u003c/code\u003e\u003c/a\u003e [fix] Avoid materializing the full similarity matrix in mine_hard_negatives w...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/huggingface/sentence-transformers/compare/v5.5.1...v5.6.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.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/9.0.3...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.16 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.16...0.15.20\"\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/aliyun/maxcompute-semantic/pull/19","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliyun%2Fmaxcompute-semantic/issues/19","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/19/packages"},{"uuid":"4763468579","node_id":"PR_kwDOTHa2xM7riq5Z","number":32,"state":"open","title":"build(deps): Bump the pip-minor-patch group across 1 directory with 36 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-28T20:07:52.000Z","updated_at":"2026-06-28T22:54:58.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"pip-minor-patch","update_count":36,"packages":[{"name":"anyio","old_version":"4.13.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"apscheduler","old_version":"3.10.4","new_version":"3.11.3","repository_url":"https://github.com/agronholm/apscheduler"},{"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":"fastapi","old_version":"0.136.3","new_version":"0.138.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"filelock","old_version":"3.29.1","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"fsspec","old_version":"2026.4.0","new_version":"2026.6.0","repository_url":"https://github.com/fsspec/filesystem_spec"},{"name":"grpcio","old_version":"1.81.0","new_version":"1.81.1","repository_url":"https://github.com/grpc/grpc"},{"name":"hpack","old_version":"4.1.0","new_version":"4.2.0","repository_url":"https://github.com/python-hyper/hpack"},{"name":"huggingface-hub","old_version":"1.18.0","new_version":"1.21.0","repository_url":"https://github.com/huggingface/huggingface_hub"},{"name":"google-api-python-client","old_version":"2.197.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.55.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"httplib2","old_version":"0.31.2","new_version":"0.32.0","repository_url":"https://github.com/httplib2/httplib2"},{"name":"llama-cpp-python","old_version":"0.3.28","new_version":"0.3.31","repository_url":"https://github.com/abetlen/llama-cpp-python"},{"name":"numpy","old_version":"2.3.5","new_version":"2.5.0","repository_url":"https://github.com/numpy/numpy"},{"name":"onnxruntime","old_version":"1.26.0","new_version":"1.27.0","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"protobuf","old_version":"7.35.0","new_version":"7.35.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pypdfium2","old_version":"5.9.0","new_version":"5.10.1","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"slowapi","old_version":"0.1.9","new_version":"0.1.10","repository_url":"https://github.com/laurents/slowapi"},{"name":"sse-starlette","old_version":"3.4.4","new_version":"3.4.5","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"tokenizers","old_version":"0.22.2","new_version":"0.23.1","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"tqdm","old_version":"4.68.2","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typer","old_version":"0.25.1","new_version":"0.26.8","repository_url":"https://github.com/fastapi/typer"},{"name":"tzlocal","old_version":"5.3.1","new_version":"5.4.3","repository_url":"https://github.com/regebro/tzlocal"},{"name":"wrapt","old_version":"2.2.1","new_version":"2.2.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"pyobjc-core","old_version":"12.1","new_version":"12.2.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"pyobjc-framework-cocoa","old_version":"12.1","new_version":"12.2.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"pyobjc-framework-contacts","old_version":"12.1","new_version":"12.2.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"pyobjc-framework-eventkit","old_version":"12.1","new_version":"12.2.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"graphifyy","old_version":"0.8.36","new_version":"0.9.1","repository_url":"https://github.com/safishamsi/graphify"},{"name":"scipy","old_version":"1.17.1","new_version":"1.18.0","repository_url":"https://github.com/scipy/scipy"},{"name":"mistral-common","old_version":"1.11.3","new_version":"1.11.5","repository_url":"https://github.com/mistralai/mistral-common"},{"name":"transformers","old_version":"5.10.2","new_version":"5.12.1","repository_url":"https://github.com/huggingface/transformers"},{"name":"regex","old_version":"2026.5.9","new_version":"2026.6.28","repository_url":"https://github.com/mrabarnett/mrab-regex"}],"path":null,"ecosystem":"pip"},"body":"[//]: # (dependabot-start)\n⚠️  **Dependabot is rebasing this PR** ⚠️ \n\nRebasing might not happen immediately, so don't worry if this takes some time.\n\nNote: if you make any changes to this PR yourself, they will take precedence over the rebase.\n\n---\n\n[//]: # (dependabot-end)\n\nBumps the pip-minor-patch group with 36 updates in the /requirements directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.1` |\n| [apscheduler](https://github.com/agronholm/apscheduler) | `3.10.4` | `3.11.3` |\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| [fastapi](https://github.com/fastapi/fastapi) | `0.136.3` | `0.138.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.1` | `3.29.4` |\n| [fsspec](https://github.com/fsspec/filesystem_spec) | `2026.4.0` | `2026.6.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.0` | `1.81.1` |\n| [hpack](https://github.com/python-hyper/hpack) | `4.1.0` | `4.2.0` |\n| [huggingface-hub](https://github.com/huggingface/huggingface_hub) | `1.18.0` | `1.21.0` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.197.0` | `2.198.0` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.53.0` | `2.55.1` |\n| [httplib2](https://github.com/httplib2/httplib2) | `0.31.2` | `0.32.0` |\n| [llama-cpp-python](https://github.com/abetlen/llama-cpp-python) | `0.3.28` | `0.3.31` |\n| [numpy](https://github.com/numpy/numpy) | `2.3.5` | `2.5.0` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.26.0` | `1.27.0` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `7.35.0` | `7.35.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.9.0` | `5.10.1` |\n| [slowapi](https://github.com/laurents/slowapi) | `0.1.9` | `0.1.10` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.4.4` | `3.4.5` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.2` | `0.23.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.2` | `4.68.3` |\n| [typer](https://github.com/fastapi/typer) | `0.25.1` | `0.26.8` |\n| [tzlocal](https://github.com/regebro/tzlocal) | `5.3.1` | `5.4.3` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.2.1` | `2.2.2` |\n| [pyobjc-core](https://github.com/ronaldoussoren/pyobjc) | `12.1` | `12.2.1` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `12.1` | `12.2.1` |\n| [pyobjc-framework-contacts](https://github.com/ronaldoussoren/pyobjc) | `12.1` | `12.2.1` |\n| [pyobjc-framework-eventkit](https://github.com/ronaldoussoren/pyobjc) | `12.1` | `12.2.1` |\n| [graphifyy](https://github.com/safishamsi/graphify) | `0.8.36` | `0.9.1` |\n| [scipy](https://github.com/scipy/scipy) | `1.17.1` | `1.18.0` |\n| [mistral-common](https://github.com/mistralai/mistral-common) | `1.11.3` | `1.11.5` |\n| [transformers](https://github.com/huggingface/transformers) | `5.10.2` | `5.12.1` |\n| [regex](https://github.com/mrabarnett/mrab-regex) | `2026.5.9` | `2026.6.28` |\n\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 `apscheduler` from 3.10.4 to 3.11.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/apscheduler/releases\"\u003eapscheduler's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.11.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed sub-minute interval jobs stalling for the duration of a DST spring-forward gap when the scheduler was configured with a \u003ccode\u003eZoneInfo\u003c/code\u003e time zone, caused by the wakeup delay being computed from the naive wall-clock difference instead of the actual UTC difference (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1103\"\u003e#1103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed imported jobs missing their scheduler and job store links (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where a job using a \u003ccode\u003eCronTrigger\u003c/code\u003e scheduled in a repeated time interval during DST transitions could cause the scheduler to get stuck in an infinite loop (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1021\"\u003e#1021\u003c/a\u003e; PR by \u003ca href=\"https://github.com/soulofakuma\"\u003e\u003ccode\u003e@​soulofakuma\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003escheduler.shutdown()\u003c/code\u003e not raising \u003ccode\u003eSchedulerNotRunning\u003c/code\u003e (or raising the wrong exception) for asynchronous schedulers when the scheduler is in fact not running\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCronTrigger\u003c/code\u003e sticking on a folded datetime during the fall-back DST transition (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1021\"\u003e#1021\u003c/a\u003e \u0026lt;\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1021\"\u003eagronholm/apscheduler#1021\u003c/a\u003e\u0026gt;_; PR by \u003ca href=\"https://github.com/berianjames\"\u003e\u003ccode\u003e@​berianjames\u003c/code\u003e\u003c/a\u003e)`\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.6 and 3.7\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003eZoneInfo\u003c/code\u003e time zones and deprecated support for pytz time zones\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eCalendarIntervalTrigger\u003c/code\u003e, backported from the 4.x series\u003c/li\u003e\n\u003cli\u003eAdded the ability to export and import jobs via \u003ccode\u003escheduler.export_jobs()\u003c/code\u003e and \u003ccode\u003escheduler.import_jobs()\u003c/code\u003e, respectively\u003c/li\u003e\n\u003cli\u003eRemoved the dependency on \u003ccode\u003esix\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eProcessPoolExecutor\u003c/code\u003e to spawn new subprocesses from scratch instead of forking on all platform\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eAsyncIOScheduler\u003c/code\u003e inadvertently creating a defunct event loop at start, leading to the scheduler not working at all\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcessPoolExecutor\u003c/code\u003e not respecting the passed keyword arguments when a broken pool was being replaced\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/apscheduler/commit/4308ec95b94069f5dbdddb6c60fb792dfc8c40a4\"\u003e\u003ccode\u003e4308ec9\u003c/code\u003e\u003c/a\u003e Added the release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/ff68780d7f66fe0f505c3a32764005cd004996b9\"\u003e\u003ccode\u003eff68780\u003c/code\u003e\u003c/a\u003e Added a note about weekday numbers in CronTrigger.from_crontab()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/36936e904052e6bfbd03f83e17b03701b7a589fe\"\u003e\u003ccode\u003e36936e9\u003c/code\u003e\u003c/a\u003e Updated actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/c0ff7e4ccfcc703db44a905b70c1d6568a6f81fa\"\u003e\u003ccode\u003ec0ff7e4\u003c/code\u003e\u003c/a\u003e Fixed Pyside6 tests failing on Python 3.9 and 3.8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/1b782c90edeac787deb3106fb3e5c775b3d6b0cd\"\u003e\u003ccode\u003e1b782c9\u003c/code\u003e\u003c/a\u003e Fixed fixture \u003ccode\u003ecoreapp\u003c/code\u003e not found\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/dc3dde4a34c021f215d120d88fe19ddc66bb8a66\"\u003e\u003ccode\u003edc3dde4\u003c/code\u003e\u003c/a\u003e Test against PySide6 on all Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/18a6f6b637e372730f6325786f97936e6eaa9f77\"\u003e\u003ccode\u003e18a6f6b\u003c/code\u003e\u003c/a\u003e Fixed imported jobs missing their scheduler and job store links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/1693db4d8861bf941d299d79a586797ad0ac6467\"\u003e\u003ccode\u003e1693db4\u003c/code\u003e\u003c/a\u003e Fix interval jobs stalling across DST spring-forward with ZoneInfo (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1114\"\u003e#1114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/0636bf4931fddb706b948b6781ebbd76058f1443\"\u003e\u003ccode\u003e0636bf4\u003c/code\u003e\u003c/a\u003e Added Python 3.14 to the test matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/3eb3de8115f1631dc5e2ecce7b00175d34ffbdf9\"\u003e\u003ccode\u003e3eb3de8\u003c/code\u003e\u003c/a\u003e Fixed bad use of pytest.raises()\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/apscheduler/compare/3.10.4...3.11.3\"\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\u003eUnreleased\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\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 `fastapi` from 0.136.3 to 0.138.1\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.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\u003cli\u003e🔧 Update sponsors: Add TestMu again. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15830\"\u003e#15830\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 zizmor workflow security checks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15820\"\u003e#15820\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 pydantic-settings from 2.14.1 to 2.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15799\"\u003e#15799\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.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for \u003ccode\u003eapp.frontend(\u0026quot;/\u0026quot;, directory=\u0026quot;dist\u0026quot;)\u003c/code\u003e and \u003ccode\u003erouter.frontend(\u0026quot;/\u0026quot;, directory=\u0026quot;dist\u0026quot;)\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15800\"\u003e#15800\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003eRead the docs: \u003ca href=\"https://fastapi.tiangolo.com/tutorial/frontend/\"\u003eFrontend\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix typo in release notes. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15807\"\u003e#15807\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add \u003ccode\u003eapp.frontend()\u003c/code\u003e instructions to Agent Library Skill. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15805\"\u003e#15805\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 release notes link. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15802\"\u003e#15802\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 white space characters in bigger apps. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15801\"\u003e#15801\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 grammar, typos, and broken links in docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15694\"\u003e#15694\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🌐 Enable Hindi docs translations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15554\"\u003e#15554\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🐛 Fix failing test, update format for raised errors. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15804\"\u003e#15804\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 test-alls-green. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15803\"\u003e#15803\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🔧 Enable checking \u003ccode\u003erelease-notes.md\u003c/code\u003e for typos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15796\"\u003e#15796\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📝 Tweak wording about deploying to FastAPI Cloud. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15793\"\u003e#15793\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\u003egpt-5.5\u003c/code\u003e model in \u003ccode\u003etranslate.py\u003c/code\u003e, specify \u003ccode\u003e-chat\u003c/code\u003e to avoid warnings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15792\"\u003e#15792\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.137.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003eiter_route_contexts()\u003c/code\u003e for advanced use cases that used to use \u003ccode\u003erouter.routes\u003c/code\u003e (e.g. Jupyverse). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15785\"\u003e#15785\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🌐 Fix broken Markdown in Korean custom response docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15774\"\u003e#15774\u003c/a\u003e by \u003ca href=\"https://github.com/kooqooo\"\u003e\u003ccode\u003e@​kooqooo\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/15761\"\u003e#15761\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/15760\"\u003e#15760\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/b90c49aefad4958abdfbcacf9c2f816940a8f0e2\"\u003e\u003ccode\u003eb90c49a\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.138.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15842\"\u003e#15842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/1f2f3df4852bf7cb29be1187806d95a0fdc7ea40\"\u003e\u003ccode\u003e1f2f3df\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0af003a85da454dcf6b6783e0ad3f0dd687e944f\"\u003e\u003ccode\u003e0af003a\u003c/code\u003e\u003c/a\u003e ♻️ Refactor Library Skills, make info easier to find for agents (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15841\"\u003e#15841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d5494c1f01796350fa082cf8a82b124e95162e9d\"\u003e\u003ccode\u003ed5494c1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/82c527e714f16bf9e07202aff0fb91cada329844\"\u003e\u003ccode\u003e82c527e\u003c/code\u003e\u003c/a\u003e 👷 Simplify pull request workflow triggers (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15836\"\u003e#15836\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3f28dbe6d84cdac19bdb2b41e1664981e37359ab\"\u003e\u003ccode\u003e3f28dbe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f6ea6b1f12e6d1a45c630a8fdf5d4c7c0959dad9\"\u003e\u003ccode\u003ef6ea6b1\u003c/code\u003e\u003c/a\u003e 👷 Update issue-manager to 0.7.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15833\"\u003e#15833\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/219ac634ab82b6321492ef97fb223b618ce13948\"\u003e\u003ccode\u003e219ac63\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fcc8e1f99431a0b381eaef03e07446e6975422b7\"\u003e\u003ccode\u003efcc8e1f\u003c/code\u003e\u003c/a\u003e ⬆️ Update issue-manager to 0.7.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15831\"\u003e#15831\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/457f4c705c0287e49d7aa4ddec292db6185d16e3\"\u003e\u003ccode\u003e457f4c7\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.3...0.138.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.1 to 3.29.4\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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.1...3.29.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/85e73d7f0575e30a3d94a00452255e381c7b8eb3\"\u003e\u003ccode\u003e85e73d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): publish from release.yaml on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f86dcb1abca36bb02b65232d411d7e8dce8569e6\"\u003e\u003ccode\u003ef86dcb1\u003c/code\u003e\u003c/a\u003e Release 3.29.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/643bdbe89bff3c61e29d14d7657d045bb89ade6d\"\u003e\u003ccode\u003e643bdbe\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): restore release environment on tag job (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/559\"\u003e#559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7a8f74a904cf7d98b6baf24eb37175d128a5f818\"\u003e\u003ccode\u003e7a8f74a\u003c/code\u003e\u003c/a\u003e validate pid range in _parse_lock_holder (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/556\"\u003e#556\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d1d49a0b232a6d904ff29b22213834df75ffc59b\"\u003e\u003ccode\u003ed1d49a0\u003c/code\u003e\u003c/a\u003e 🔧 ci(release): publish to PyPI on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b37e162e316ec0ef6e5b8c37a1c04bdaaa411487\"\u003e\u003ccode\u003eb37e162\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/558\"\u003e#558\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d9216dea26f31d369c7d3422bfe14c08b51232f1\"\u003e\u003ccode\u003ed9216de\u003c/code\u003e\u003c/a\u003e Release 3.29.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.1...3.29.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fsspec` from 2026.4.0 to 2026.6.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/a2457004d03e0312f715f90f58873de5ab195a37\"\u003e\u003ccode\u003ea245700\u003c/code\u003e\u003c/a\u003e changelog (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2049\"\u003e#2049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/652325d9b9459286a5b72c7e6228b061fb29827c\"\u003e\u003ccode\u003e652325d\u003c/code\u003e\u003c/a\u003e Fix async cat ranges on error (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2045\"\u003e#2045\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/073aac840748ab95bea39468306123268e316184\"\u003e\u003ccode\u003e073aac8\u003c/code\u003e\u003c/a\u003e Forward kwargs from cat_ranges to cat_file (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2044\"\u003e#2044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/2818611ab2a197cb3d560d50be09fdb5fbff775d\"\u003e\u003ccode\u003e2818611\u003c/code\u003e\u003c/a\u003e FTP: preserve filenames containing whitespace in _mlsd2 (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2043\"\u003e#2043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/c87938473cd5a25448385b3fb77481574595e353\"\u003e\u003ccode\u003ec879384\u003c/code\u003e\u003c/a\u003e Prevent attribute error by checking for 'forced' attribute before flushing ca...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/71b8a6b6b1c3dbb33fa5cb0c206a84b35164d035\"\u003e\u003ccode\u003e71b8a6b\u003c/code\u003e\u003c/a\u003e Reflect async _walk correctly (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2040\"\u003e#2040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/5eec9f9353b8d517d296428441a84fa26e9a6438\"\u003e\u003ccode\u003e5eec9f9\u003c/code\u003e\u003c/a\u003e Fix: Omit \u003ccode\u003ethreading.get_ident()\u003c/code\u003e from cache token for async implementations ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/86438783f93b1398ef245b92f0e6063b445b611c\"\u003e\u003ccode\u003e8643878\u003c/code\u003e\u003c/a\u003e Small safety improvements (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2039\"\u003e#2039\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/a1c16ab3f07f354aa371c38f7b1b07ea7fd4c5c8\"\u003e\u003ccode\u003ea1c16ab\u003c/code\u003e\u003c/a\u003e Honour simple_templates everywhere in referenceFS (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2029\"\u003e#2029\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/85facaaf2659c8bbd031df24ead9aca36668c635\"\u003e\u003ccode\u003e85facaa\u003c/code\u003e\u003c/a\u003e Fix infinite recursion in expand_path when resolving paths with glob magic ch...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fsspec/filesystem_spec/compare/2026.4.0...2026.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.81.0 to 1.81.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.81.1\u003c/h2\u003e\n\u003cp\u003eThis is release 1.81.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egraphic\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[EventEngine] Fix a potential use-after-free error on Windows. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42078\"\u003e#42078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ssl] Server side handshaker factory stores a map of key signers. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42002\"\u003e#42002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Core] Fix completion queue shutdown race on weak memory models (ARM). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41510\"\u003e#41510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Fix a Windows race that causes an assertion error. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41563\"\u003e#41563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[grpc_error] enable error_flatten experiment in OSS. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41471\"\u003e#41471\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[ObjC] Add receiveNextMessage to GRPCUnaryProtoCall. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42260\"\u003e#42260\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Add typing_extensions dep to aio Bazel target. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42001\"\u003e#42001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Pyright] Part 1 - Pyright for src/python/grpcio/grpc/aio/_base_server.py. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42240\"\u003e#42240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Drop 3.9. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42145\"\u003e#42145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] grpc-status: Relax protobuf dependency upper bound to allow 7.x. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41948\"\u003e#41948\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Typeguard] Part 5 - Add Typeguard SYNC Stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40278\"\u003e#40278\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove GIL from ReceiveMessageOperation.un_c method. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41812\"\u003e#41812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Support observability in AsyncIO stack. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41573\"\u003e#41573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Trim Python2 backward compatiblity syntax - removed (object) inheritance. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41708\"\u003e#41708\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Ruby] Drop support for EOL Ruby 3.1 and clean up. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41435\"\u003e#41435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Composed CallCredentials keep a reference to their source. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41782\"\u003e#41782\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/grpc/grpc/commit/e84a8a2f04095f2772ba42a4abccde4f9243e75b\"\u003e\u003ccode\u003ee84a8a2\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.81.1 (on v1.81.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/42584\"\u003e#42584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/4706d6a147d58bdcca59509ec22d8c2086e925ca\"\u003e\u003ccode\u003e4706d6a\u003c/code\u003e\u003c/a\u003e [xDS] fix use-after-free in global XdsClient map (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/42559\"\u003e#42559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/42a6b5b0d55bc6445da1ca6f71d6f3a824bec092\"\u003e\u003ccode\u003e42a6b5b\u003c/code\u003e\u003c/a\u003e [Core][Release] Update BCR presubmit job definition (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/42561\"\u003e#42561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.81.0...v1.81.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hpack` from 4.1.0 to 4.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-hyper/hpack/blob/master/CHANGELOG.rst\"\u003ehpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.2.0 (2026-06-22)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAPI Changes (Backward Incompatible)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 has been removed.\u003c/li\u003e\n\u003cli\u003eSupport for PyPy 3.9 has been removed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAPI Changes (Backward Compatible)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14 has been added.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHeaders marked as \u003ccode\u003esensitive\u003c/code\u003e will no longer log their value at DEBUG level. Instead a placeholder value of \u003ccode\u003eSENSITIVE_REDACTED\u003c/code\u003e is logged.\u003c/li\u003e\n\u003cli\u003eFixed perfect match missed for headers with empty values.\u003c/li\u003e\n\u003cli\u003eRestricted variable integer decoding to uint32 to prevent run-away computation. With thanks to \u003ccode\u003eHiroki Nishino\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _Hiroki Nishino: \u003ca href=\"https://github.com/tawAsh1\"\u003ehttps://github.com/tawAsh1\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/python-hyper/hpack/commit/d05cff4cd462658847f67c48700aab40b2ba8cf1\"\u003e\u003ccode\u003ed05cff4\u003c/code\u003e\u003c/a\u003e v4.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/4bdecf4700af6e9a480647305c4c70ca2c31150d\"\u003e\u003ccode\u003e4bdecf4\u003c/code\u003e\u003c/a\u003e packaging and dependencies++\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/8cfb02c547740e16dbfe7aba77bad84b297cec2c\"\u003e\u003ccode\u003e8cfb02c\u003c/code\u003e\u003c/a\u003e Restricte variable integer decoding to uint32 to prevent run-away computation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/77e36a9cb51a930047ab8d4bed527e4c4d8a9854\"\u003e\u003ccode\u003e77e36a9\u003c/code\u003e\u003c/a\u003e linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/5258f148b2b7c507383cf6d6116f8f32c67187d4\"\u003e\u003ccode\u003e5258f14\u003c/code\u003e\u003c/a\u003e rename test file to avoice pyc import confusion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/44193d8eb22a805430adb893075a744e0e2e3cc7\"\u003e\u003ccode\u003e44193d8\u003c/code\u003e\u003c/a\u003e project cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/e0497f94c948d61d2af0954933c139475f78e48e\"\u003e\u003ccode\u003ee0497f9\u003c/code\u003e\u003c/a\u003e Fix perfect match missed for headers with empty values: add test and changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/89cce964fded888d720289dcce881d4e1f35be80\"\u003e\u003ccode\u003e89cce96\u003c/code\u003e\u003c/a\u003e Fix perfect match missed for headers with empty values\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/1621490073e4992fe3bf28b547d2574edbd95043\"\u003e\u003ccode\u003e1621490\u003c/code\u003e\u003c/a\u003e Apply suggestion from \u003ca href=\"https://github.com/Kriechi\"\u003e\u003ccode\u003e@​Kriechi\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/517dd788e0dddc57885296a4482095847eebbf9d\"\u003e\u003ccode\u003e517dd78\u003c/code\u003e\u003c/a\u003e Apply suggestion from \u003ca href=\"https://github.com/Kriechi\"\u003e\u003ccode\u003e@​Kriechi\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-hyper/hpack/compare/v4.1.0...v4.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `huggingface-hub` from 1.18.0 to 1.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/huggingface_hub/releases\"\u003ehuggingface-hub's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[v1.21.0] Jobs filtering \u0026amp; pagination\u003c/h2\u003e\n\u003ch2\u003e📊 Jobs listing revamped: filter, paginate, and \u003ccode\u003els\u003c/code\u003e instead of \u003ccode\u003eps\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003eThe Jobs listing API and CLI have been overhauled with server-side filtering, proper pagination, and a CLI rename that aligns with the rest of \u003ccode\u003ehf\u003c/code\u003e. \u003ccode\u003elist_jobs()\u003c/code\u003e now accepts \u003ccode\u003estatus\u003c/code\u003e and \u003ccode\u003elabels\u003c/code\u003e parameters that push filtering to the server, and returns a lazy iterator (matching \u003ccode\u003elist_models\u003c/code\u003e, \u003ccode\u003elist_datasets\u003c/code\u003e, etc.) so large result sets are fetched page by page. On the CLI side, \u003ccode\u003ehf jobs ps\u003c/code\u003e has been renamed to \u003ccode\u003ehf jobs ls\u003c/code\u003e for consistency with \u003ccode\u003ehf repos ls\u003c/code\u003e, \u003ccode\u003ehf models ls\u003c/code\u003e, and friends — \u003ccode\u003eps\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e still work as aliases.\u003c/p\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eBreaking changes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elist_jobs()\u003c/code\u003e now returns an \u003ccode\u003eIterable[JobInfo]\u003c/code\u003e instead of \u003ccode\u003elist[JobInfo]\u003c/code\u003e. If you indexed the result (\u003ccode\u003ejobs[0]\u003c/code\u003e), wrap it with \u003ccode\u003elist(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-f\u003c/code\u003e/\u003ccode\u003e--filter\u003c/code\u003e in \u003ccode\u003ehf jobs ls\u003c/code\u003e is deprecated. Use \u003ccode\u003e--status\u003c/code\u003e and \u003ccode\u003e--label\u003c/code\u003e instead. Glob patterns (\u003ccode\u003edata-*\u003c/code\u003e), negation (\u003ccode\u003ekey!=value\u003c/code\u003e), and filtering by \u003ccode\u003eid\u003c/code\u003e/\u003ccode\u003eimage\u003c/code\u003e/\u003ccode\u003ecommand\u003c/code\u003e are no longer supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003efrom huggingface_hub import list_jobs\r\n\u003ch1\u003eFilter by status and labels\u003c/h1\u003e\n\u003cp\u003elist_jobs(status=[\u0026quot;RUNNING\u0026quot;, \u0026quot;SCHEDULING\u0026quot;], labels={\u0026quot;env\u0026quot;: \u0026quot;prod\u0026quot;})\u003c/p\u003e\n\u003ch1\u003eIterate lazily\u003c/h1\u003e\n\u003cp\u003efor job in list_jobs():\nprint(job.id)\u003c/p\u003e\n\u003ch1\u003eMaterialize all results\u003c/h1\u003e\n\u003cp\u003eall_jobs = list(list_jobs())\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e# Filter by status and labels\r\nhf jobs ls --status running,scheduling --label env=prod --label team=ml\r\n\r\n# Paginate with --limit\r\nhf jobs ls -a --limit 500\r\nhf jobs ls -a --limit 0  # no limit\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e[Jobs] Add stage/label filtering to list_jobs API and CLI by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4395\"\u003e#4395\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[Jobs] Paginate list_jobs and add --limit to \u003ccode\u003ehf jobs ps\u003c/code\u003e by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4403\"\u003e#4403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[CLI] [Jobs] Rename job listing to 'hf jobs ls' (and keep 'hf jobs ps' alias) by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4409\"\u003e#4409\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e📚 \u003cstrong\u003eDocumentation:\u003c/strong\u003e \u003ca href=\"https://huggingface.co/docs/huggingface_hub/main/en/guides/cli\"\u003eCLI guide\u003c/a\u003e, \u003ca href=\"https://huggingface.co/docs/huggingface_hub/main/en/guides/jobs\"\u003eJobs guide\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Fix circular import on \u003ccode\u003efrom huggingface_hub import login\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003eA regression introduced in v1.20.0 caused \u003ccode\u003efrom huggingface_hub import login\u003c/code\u003e to raise an \u003ccode\u003eImportError\u003c/code\u003e on a fresh interpreter, due to a circular dependency between \u003ccode\u003e_oauth_device\u003c/code\u003e and \u003ccode\u003eutils._http\u003c/code\u003e. The fix moves \u003ccode\u003e_oauth_device.py\u003c/code\u003e into the \u003ccode\u003eutils\u003c/code\u003e layer so all imports resolve downward, eliminating the cycle. No lazy imports or workarounds required.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix circular import on \u003ccode\u003efrom huggingface_hub import login\u003c/code\u003e by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4385\"\u003e#4385\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🔧 Other QoL Improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRetry requests on httpx.RemoteProtocolError by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4398\"\u003e#4398\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📖 Documentation\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/huggingface/huggingface_hub/commit/aea9b9de1284f54862df99820f963d6030803860\"\u003e\u003ccode\u003eaea9b9d\u003c/code\u003e\u003c/a\u003e Release: v1.21.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/2e2ed568a0d8e3841d2fe9d192f17cdb30ccf129\"\u003e\u003ccode\u003e2e2ed56\u003c/code\u003e\u003c/a\u003e Release: v1.21.0.rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/4bd4c906cac546643ca5fe0ca08e301ce7a98b62\"\u003e\u003ccode\u003e4bd4c90\u003c/code\u003e\u003c/a\u003e [CLI] [Jobs] Rename job listing to 'hf jobs ls' (and keep 'hf jobs ps' alias)...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/fa3eb459eb3fdf15347930d7dc70f0a7e413d6e5\"\u003e\u003ccode\u003efa3eb45\u003c/code\u003e\u003c/a\u003e [Jobs] Paginate list_jobs and add --limit to \u003ccode\u003ehf jobs ps\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4403\"\u003e#4403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/ecfd4c5e88acfa885fc9146bf5df61d4de7b46a9\"\u003e\u003ccode\u003eecfd4c5\u003c/code\u003e\u003c/a\u003e [CLI] Fix ty/mypy errors with click 8.4.2 (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4408\"\u003e#4408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/341469f1f87fb9932410fde9bdb81ac269a64727\"\u003e\u003ccode\u003e341469f\u003c/code\u003e\u003c/a\u003e Update hardware flavor enums (automated commit) (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4406\"\u003e#4406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/2fbcdfeec8a1bf689623ecb87afc7d5db4cd23bb\"\u003e\u003ccode\u003e2fbcdfe\u003c/code\u003e\u003c/a\u003e [i18n-HI] Add Hindi translation for guides overview (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4405\"\u003e#4405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/5bc6bfa7df18752f1adfd649816be315937cfa6f\"\u003e\u003ccode\u003e5bc6bfa\u003c/code\u003e\u003c/a\u003e [Jobs] Add stage/label filtering to list_jobs API and CLI (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4395\"\u003e#4395\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/d991f099f53c7439edbf9432c5137d2069199e5a\"\u003e\u003ccode\u003ed991f09\u003c/code\u003e\u003c/a\u003e Fix IndexError in filter_repo_objects on an empty pattern (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4402\"\u003e#4402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/0df783fb8f3d1a37b00255007e9af78e4e9dca8f\"\u003e\u003ccode\u003e0df783f\u003c/code\u003e\u003c/a\u003e Retry requests on httpx.RemoteProtocolError (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4398\"\u003e#4398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/huggingface/huggingface_hub/compare/v1.18.0...v1.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-api-python-client` from 2.197.0 to 2.198.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-api-python-client/releases\"\u003egoogle-api-python-client's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.198.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/compare/v2.197.0...v2.198.0\"\u003e2.198.0\u003c/a\u003e (2026-06-23)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eadexchangebuyer2:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/a6b7a3c1312a0b843c6451f1502268232af1e08d\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/a6b7a3c1312a0b843c6451f1502268232af1e08d\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eadmin:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/39a7f8e64940d318ce50b5431ebca0ca6f044b4e\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/39a7f8e64940d318ce50b5431ebca0ca6f044b4e\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eagentregistry:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/47cc6885a57ff256a2878b8902f66f4d97e980be\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/47cc6885a57ff256a2878b8902f66f4d97e980be\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eaiplatform:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/bf9010bd3c1f6825858612032ad8722e53368738\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/bf9010bd3c1f6825858612032ad8722e53368738\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ealertcenter:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/60ed501536c048d4257f05fb44d01ac90afc45c6\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/60ed501536c048d4257f05fb44d01ac90afc45c6\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ealloydb:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/07ab81d00d9225efc0d1bfb54d7a2131537013bb\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/07ab81d00d9225efc0d1bfb54d7a2131537013bb\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eanalyticsadmin:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/d13cd0d5ec973a994a6409e4ccdd879ca5cdec24\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/d13cd0d5ec973a994a6409e4ccdd879ca5cdec24\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eanalyticshub:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/29d33229a8aca59cc2105ca57f10c5c34392eedf\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/29d33229a8aca59cc2105ca57f10c5c34392eedf\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eandroidmanagement:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0b2dcfba95c75409fcebe62b45d481e2b9cee79c\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0b2dcfba95c75409fcebe62b45d481e2b9cee79c\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eandroidpublisher:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/1dc37cdcddd779ca435abc9593b0bfb4e298770d\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/1dc37cdcddd779ca435abc9593b0bfb4e298770d\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eartifactregistry:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/001dba95de25008758d1955c7ff5db51e48606a9\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/001dba95de25008758d1955c7ff5db51e48606a9\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eassuredworkloads:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/2982b1986becfc8cf17768a86146cfac04338f81\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/2982b1986becfc8cf17768a86146cfac04338f81\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebackupdr:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0b64d9bb3d591fd521b86b21fdbc37f3dd793f43\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0b64d9bb3d591fd521b86b21fdbc37f3dd793f43\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigqueryconnection:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/8e6a3e697448de8fd7128240f2615228db24e85c\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/8e6a3e697448de8fd7128240f2615228db24e85c\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigquerydatatransfer:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/012db99dae421f7b21f0e43b1df333b209cf3e15\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/012db99dae421f7b21f0e43b1df333b209cf3e15\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigquery:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/9548dcf1aa1eeaa6524b6d9386178dac69c39096\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/9548dcf1aa1eeaa6524b6d9386178dac69c39096\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecalendar:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/399252cfd1bed4193f5821e66536d6a3a75f03c8\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/399252cfd1bed4193f5821e66536d6a3a75f03c8\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eces:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/2716cb2b0eb0d91686901d5153aa9581d1143bb4\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/2716cb2b0eb0d91686901d5153aa9581d1143bb4\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003echat:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0ae828d973d7bb7f3e6f86bd4338b11b9f3c3e8f\"\u003ehttps://togithub.com/googleapis/goog...\n\n_Description has been truncated_","html_url":"https://github.com/francoisdeverdun/Estormi/pull/32","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/francoisdeverdun%2FEstormi/issues/32","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/32/packages"},{"uuid":"4712521442","node_id":"PR_kwDOQFZ20c7o9OLl","number":108,"state":"open","title":"chore(deps): bump the python-minor group across 1 directory with 27 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-06-22T00:38:58.000Z","updated_at":"2026-06-22T00:39:36.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor","update_count":27,"packages":[{"name":"fastapi","old_version":"0.135.2","new_version":"0.138.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.41.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"sqlalchemy","old_version":"2.0.48","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.2","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"githubkit-schemas","old_version":"26.6.14","new_version":"26.6.20","repository_url":"https://github.com/yanyongyu/githubkit"},{"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.13.1","new_version":"2.14.2","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"slowapi","old_version":"0.1.9","new_version":"0.1.10","repository_url":"https://github.com/laurents/slowapi"},{"name":"sentry-sdk","old_version":"2.54.0","new_version":"2.63.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"starlette","old_version":"1.0.1","new_version":"1.3.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"filelock","old_version":"3.28.0","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"pytest","old_version":"9.0.2","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-asyncio","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pytest-cov","old_version":"7.0.0","new_version":"7.1.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"ruff","old_version":"0.15.5","new_version":"0.15.18","repository_url":"https://github.com/astral-sh/ruff"},{"name":"anyio","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.3.1","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"httptools","old_version":"0.7.1","new_version":"0.8.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"limits","old_version":"5.6.0","new_version":"5.8.0","repository_url":"https://github.com/alisaifee/limits"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"watchfiles","old_version":"1.1.1","new_version":"1.2.0","repository_url":"https://github.com/samuelcolvin/watchfiles"},{"name":"wrapt","old_version":"2.0.1","new_version":"2.2.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"coverage","old_version":"7.12.0","new_version":"7.14.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"librt","old_version":"0.7.5","new_version":"0.11.0","repository_url":"https://github.com/mypyc/librt"},{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 27 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.135.2` | `0.138.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.41.0` | `0.49.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.32` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.48` | `2.0.51` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.2` |\n| [githubkit-schemas](https://github.com/yanyongyu/githubkit) | `26.6.14` | `26.6.20` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.2` |\n| [slowapi](https://github.com/laurents/slowapi) | `0.1.9` | `0.1.10` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.54.0` | `2.63.0` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.1` | `1.3.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.28.0` | `3.29.4` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.1.1` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `1.3.0` | `1.4.0` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `7.0.0` | `7.1.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.5` | `0.15.18` |\n| [anyio](https://github.com/agronholm/anyio) | `4.12.0` | `4.14.0` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.4.1` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.7.1` | `0.8.0` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [limits](https://github.com/alisaifee/limits) | `5.6.0` | `5.8.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.41.5` | `2.47.0` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.1.1` | `1.2.0` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.0.1` | `2.2.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.12.0` | `7.14.2` |\n| [librt](https://github.com/mypyc/librt) | `0.7.5` | `0.11.0` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n\n\nUpdates `fastapi` from 0.135.2 to 0.138.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.138.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for \u003ccode\u003eapp.frontend(\u0026quot;/\u0026quot;, directory=\u0026quot;dist\u0026quot;)\u003c/code\u003e and \u003ccode\u003erouter.frontend(\u0026quot;/\u0026quot;, directory=\u0026quot;dist\u0026quot;)\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15800\"\u003e#15800\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003eRead the docs: \u003ca href=\"https://fastapi.tiangolo.com/tutorial/frontend/\"\u003eFrontend\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix typo in release notes. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15807\"\u003e#15807\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add \u003ccode\u003eapp.frontend()\u003c/code\u003e instructions to Agent Library Skill. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15805\"\u003e#15805\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 release notes link. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15802\"\u003e#15802\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 white space characters in bigger apps. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15801\"\u003e#15801\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 grammar, typos, and broken links in docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15694\"\u003e#15694\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🌐 Enable Hindi docs translations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15554\"\u003e#15554\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🐛 Fix failing test, update format for raised errors. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15804\"\u003e#15804\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 test-alls-green. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15803\"\u003e#15803\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🔧 Enable checking \u003ccode\u003erelease-notes.md\u003c/code\u003e for typos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15796\"\u003e#15796\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📝 Tweak wording about deploying to FastAPI Cloud. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15793\"\u003e#15793\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\u003egpt-5.5\u003c/code\u003e model in \u003ccode\u003etranslate.py\u003c/code\u003e, specify \u003ccode\u003e-chat\u003c/code\u003e to avoid warnings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15792\"\u003e#15792\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.137.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003eiter_route_contexts()\u003c/code\u003e for advanced use cases that used to use \u003ccode\u003erouter.routes\u003c/code\u003e (e.g. Jupyverse). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15785\"\u003e#15785\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🌐 Fix broken Markdown in Korean custom response docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15774\"\u003e#15774\u003c/a\u003e by \u003ca href=\"https://github.com/kooqooo\"\u003e\u003ccode\u003e@​kooqooo\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/15761\"\u003e#15761\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/15760\"\u003e#15760\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/15759\"\u003e#15759\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/15757\"\u003e#15757\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/15756\"\u003e#15756\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/15755\"\u003e#15755\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/15754\"\u003e#15754\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/15753\"\u003e#15753\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/15752\"\u003e#15752\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/15751\"\u003e#15751\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/15758\"\u003e#15758\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 sponsors: add BairesDev. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15787\"\u003e#15787\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 script to simplify previews. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15786\"\u003e#15786\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/4b83b0d409009c8de9df4070fe163838b1a700c7\"\u003e\u003ccode\u003e4b83b0d\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.138.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15808\"\u003e#15808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/041cb0cdfa2d0f705d14ed07c2c2e0f92ef5f32c\"\u003e\u003ccode\u003e041cb0c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/10393846ede7a2947cec594d15a43f813001cab4\"\u003e\u003ccode\u003e1039384\u003c/code\u003e\u003c/a\u003e 📝 Fix typo in release notes (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15807\"\u003e#15807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0303491b69ff84a4632c0314e6db4df74f2f93f9\"\u003e\u003ccode\u003e0303491\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/190f6e2033c8b886b25027be284d8c8c1893f28c\"\u003e\u003ccode\u003e190f6e2\u003c/code\u003e\u003c/a\u003e 📝 Add Frontend instructions to Agent Library Skill (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15805\"\u003e#15805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/17945e5ab7f25234340c152a40d232a98857e079\"\u003e\u003ccode\u003e17945e5\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2260afaf433103c8104b34d256cf0b96b058823b\"\u003e\u003ccode\u003e2260afa\u003c/code\u003e\u003c/a\u003e 🐛 Fix failing test, update format for raised errors (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15804\"\u003e#15804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0cd5001d0ef80a07e2d775c5c75522391a3e06d7\"\u003e\u003ccode\u003e0cd5001\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7cb1ab6264bc03319832f553730b511192a0c0d3\"\u003e\u003ccode\u003e7cb1ab6\u003c/code\u003e\u003c/a\u003e 👷 Fix test-alls-green (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15803\"\u003e#15803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9c7eceb00ff6e1d37980954418f7c9dab30a4cd5\"\u003e\u003ccode\u003e9c7eceb\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.2...0.138.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.41.0 to 0.49.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.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2971\"\u003eKludex/uvicorn#2971\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.47.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2919\"\u003eKludex/uvicorn#2919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2920\"\u003eKludex/uvicorn#2920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2927\"\u003eKludex/uvicorn#2927\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\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\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware 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/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\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/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively 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/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config 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/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs 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/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context 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/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\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/2913\"\u003eKludex/uvicorn#2913\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/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\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.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.44.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for 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/2888\"\u003eKludex/uvicorn#2888\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.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\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\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\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\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/Kludex/uvicorn/commit/3ef2e3e08e3d9ad9572800f8bc54f3eaed9eab0a\"\u003e\u003ccode\u003e3ef2e3e\u003c/code\u003e\u003c/a\u003e Version 0.49.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2973\"\u003e#2973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/eeb64b1d1c95a14096ed3313377c74b485f558fc\"\u003e\u003ccode\u003eeeb64b1\u003c/code\u003e\u003c/a\u003e Consume duplicate forwarding headers in ProxyHeadersMiddleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/630f4aca14e79183617c71be714030842a1041c5\"\u003e\u003ccode\u003e630f4ac\u003c/code\u003e\u003c/a\u003e Make the watchfiles reload tests deterministic (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2972\"\u003e#2972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9154922e3730f7aba68ecc3ecbf536680ee8fd1c\"\u003e\u003ccode\u003e9154922\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group across 1 directory with 6 updates ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/739727a1d80e468d1e47e98bbd824ee9e3c9554b\"\u003e\u003ccode\u003e739727a\u003c/code\u003e\u003c/a\u003e Migrate docs deploy from Cloudflare Pages to Workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2967\"\u003e#2967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/be4a240488d3fb678a11b8e8f83505266f5f1de7\"\u003e\u003ccode\u003ebe4a240\u003c/code\u003e\u003c/a\u003e Gate docs preview deploy on Cloudflare token presence (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/c489d7e10dfe653a2bba914feedf2a632a026e6f\"\u003e\u003ccode\u003ec489d7e\u003c/code\u003e\u003c/a\u003e Bump httptools 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\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9f547bd82ef52bcba206e04170b359bd6daa25b3\"\u003e\u003ccode\u003e9f547bd\u003c/code\u003e\u003c/a\u003e Skip docs preview deploy for Dependabot PRs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2961\"\u003e#2961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/44446b894e37ca76830d6aa83df4349795400ed4\"\u003e\u003ccode\u003e44446b8\u003c/code\u003e\u003c/a\u003e Migrate documentation from MkDocs Material to Zensical (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2959\"\u003e#2959\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cfd659c4f18b526adce9c255c96707bab20af40c\"\u003e\u003ccode\u003ecfd659c\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions to 10.21.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2958\"\u003e#2958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.41.0...0.49.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.27 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\u003ch2\u003eVersion 0.0.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch 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/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating 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/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form 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/297\"\u003eKludex/python-multipart#297\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.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator 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/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\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/291\"\u003eKludex/python-multipart#291\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.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.29\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/manunio\"\u003e\u003ccode\u003e@​manunio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003eKludex/python-multipart#270\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.28...0.0.29\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.28...0.0.29\u003c/a\u003e\u003c/p\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.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\u003ch2\u003e0.0.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.29 (2026-05-17)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003e#270\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/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\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.27...0.0.32\"\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.48 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 `greenlet` from 3.3.2 to 3.5.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.5.2 (2026-06-17)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eThe minimum supported version of Python 3.15 is now 3.15b2.\u003c/li\u003e\n\u003cli\u003eFix some garbage-collection related crashes on free-threaded Python\n3.15. Thanks to Kumar Aditya in \u003ccode\u003ePR [#511](https://github.com/python-greenlet/greenlet/issues/511) \u0026lt;https://github.com/python-greenlet/greenlet/pull/511\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eImprove garbage collection of greenlets. This mostly applies to\nPython 3.15. Thanks to Kumar Aditya in \u003ccode\u003ePR [#512](https://github.com/python-greenlet/greenlet/issues/512) \u0026lt;https://github.com/python-greenlet/greenlet/pull/512\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.1 (2026-05-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd preliminary support for Python 3.15b1. This has not been\nreviewed by CPython core developers, but all tests pass. Binary\nwheels of this version won't work on earlier Python 3.15 builds and\nmay not work on later 3.15 builds.\u003c/li\u003e\n\u003cli\u003eFix the discrepancy in the way the two \u003ccode\u003egetcurrent\u003c/code\u003e APIs behave\nduring greenlet teardown. One API (the C API used by, e.g.,  gevent) raised a\n\u003ccode\u003eRuntimeError\u003c/code\u003e; the other (the Python \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e API)\nreturned \u003ccode\u003eNone\u003c/code\u003e. This second way is incompatible with greenlet's type\nannotations, so \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e now raises a\n\u003ccode\u003eRuntimeError\u003c/code\u003e as well.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.0 (2026-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the \u003ccode\u003eatexit\u003c/code\u003e callback. This callback caused greenlet APIs\nto become unavailable far too soon during interpreter shutdown. Now\nthey remain available while all \u003ccode\u003eatexit\u003c/code\u003e callbacks run. Sometime\nafter \u003ccode\u003ePy_IsFinalizing\u003c/code\u003e becomes true, they may begin misbehaving.\nBecause the order in which C extensions are finalized is undefined,\nC extensions that are sensitive to this need to check the results of\nthat function before invoking greenlet APIs. As a convenience,\n\u003ccode\u003ePyGreenlet_GetCurrent\u003c/code\u003e sets an exception and returns \u003ccode\u003eNULL\u003c/code\u003e\nwhen this happens (and \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e begins returning\n\u003ccode\u003eNone\u003c/code\u003e); other greenlet C API functions have undefined behaviour.\nMethods invoked directly on pre-existing \u003ccode\u003egreenlet.greenlet\u003c/code\u003e\nobjects will continue to function at least until the greenlet C\nextension has been garbage collected and finalized.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 508 \u0026lt;https://github.com/python-greenlet/greenlet/pull/508\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003c!-- 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-greenlet/greenlet/commit/0b64e9c851ae7bd8fc9b73d98031168237ee71db\"\u003e\u003ccode\u003e0b64e9c\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/3e28d276d01e74882f4cff1a4b54aed47153d617\"\u003e\u003ccode\u003e3e28d27\u003c/code\u003e\u003c/a\u003e Add change note for \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/512\"\u003e#512\u003c/a\u003e [skip ci]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6563c5e909a84c037c3d03e46851cd3016525a35\"\u003e\u003ccode\u003e6563c5e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/512\"\u003e#512\u003c/a\u003e from kumaraditya303/ft-mem\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/ab6eff60766e8954d890eef064ee2e1dd7c8b262\"\u003e\u003ccode\u003eab6eff6\u003c/code\u003e\u003c/a\u003e add ignore for win 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/41f5349a0f1b69ce180c90acb9a4cf2c84d612e7\"\u003e\u003ccode\u003e41f5349\u003c/code\u003e\u003c/a\u003e revert back to fails_leakcheck_on_py314_or_less\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/b0aac05734e9e41d4a592e0c913846990a9c7c24\"\u003e\u003ccode\u003eb0aac05\u003c/code\u003e\u003c/a\u003e set fail-fast=false and if condition correctly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/2f87f316613d401bbf1b1653595654654e572550\"\u003e\u003ccode\u003e2f87f31\u003c/code\u003e\u003c/a\u003e rename to ignores_leakcheck_on_py314_or_less\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/28bbde3de939acefe8e9d72fb179115b81392a87\"\u003e\u003ccode\u003e28bbde3\u003c/code\u003e\u003c/a\u003e add comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/35206b8dc536cfe92c09509432b4a301b5fede5f\"\u003e\u003ccode\u003e35206b8\u003c/code\u003e\u003c/a\u003e fix test and restrict tp_is_gc \u0026lt; 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/abdbab55b03334700fd264e523ac75926daba043\"\u003e\u003ccode\u003eabdbab5\u003c/code\u003e\u003c/a\u003e fix gil enabled\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `githubkit-schemas` from 26.6.14 to 26.6.20\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/yanyongyu/githubkit/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 `pydantic-settings` from 2.13.1 to 2.14.2\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.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is a security patch release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent \u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e from following symlinks outside \u003ccode\u003esecrets_dir\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/889\"\u003epydantic/pydantic-settings#889\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.2 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/890\"\u003epydantic/pydantic-settings#890\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cp\u003eFixes \u003ca href=\"https://github.com/pydantic/pydantic-settings/security/advisories/GHSA-4xgf-cpjx-pc3j\"\u003eGHSA-4xgf-cpjx-pc3j\u003c/a\u003e: \u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e with \u003ccode\u003esecrets_nested_subdir=True\u003c/code\u003e could follow a symbolic link inside \u003ccode\u003esecrets_dir\u003c/code\u003e pointing outside it, reading out-of-tree files into settings values and bypassing the \u003ccode\u003esecrets_dir_max_size\u003c/code\u003e cap. Affected versions: \u003ccode\u003e\u0026gt;= 2.12.0, \u0026lt; 2.14.2\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.14.2\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.14.2\u003c/a\u003e\u003c/p\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\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/d703bd717e5e07439fa89da2245eee6139413e9e\"\u003e\u003ccode\u003ed703bd7\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.2 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/890\"\u003e#890\u003c/a\u003e)\u003c/li\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `slowapi` from 0.1.9 to 0.1.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/laurents/slowapi/releases\"\u003eslowapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.1.10\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore: Update warn to warning py3.11 deprecation by \u003ca href=\"https://github.com/kevin868\"\u003e\u003ccode\u003e@​kevin868\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/200\"\u003elaurentS/slowapi#200\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: allow Requests to be sent to exempt_when by \u003ca href=\"https://github.com/colin99d\"\u003e\u003ccode\u003e@​colin99d\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/160\"\u003elaurentS/slowapi#160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: drop python 3.7 and 3.8 from CI checks by \u003ca href=\"https://github.com/laurentS\"\u003e\u003ccode\u003e@​laurentS\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/238\"\u003elaurentS/slowapi#238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: prepare 0.1.10 release by \u003ca href=\"https://github.com/ecly\"\u003e\u003ccode\u003e@​ecly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/212\"\u003elaurentS/slowapi#212\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/kevin868\"\u003e\u003ccode\u003e@​kevin868\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/200\"\u003elaurentS/slowapi#200\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colin99d\"\u003e\u003ccode\u003e@​colin99d\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/160\"\u003elaurentS/slowapi#160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ecly\"\u003e\u003ccode\u003e@​ecly\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/212\"\u003elaurentS/slowapi#212\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/laurentS/slowapi/compare/v0.1.9...v0.1.10\"\u003ehttps://github.com/laurentS/slowapi/compare/v0.1.9...v0.1.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/laurentS/slowapi/blob/master/CHANGELOG.md\"\u003eslowapi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.1.10] - 2026-06-13\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded: allow usage of the request object in the except_when function (thanks \u003ca href=\"https://github.com/colin99d\"\u003e\u003ccode\u003e@​colin99d\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded more test exemption logic (thanks \u003ca href=\"https://github.com/colin99\"\u003e\u003ccode\u003e@​colin99\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix logger warning for Python 3.11 deprecation  (thanks \u003ca href=\"https://github.com/kevin868\"\u003e\u003ccode\u003e@​kevin868\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/laurentS/slowapi/commit/75799a3ec9498af10110068190356f704f838fe3\"\u003e\u003ccode\u003e75799a3\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/6f22eabc90a793d8c8459b6a8115c6f7fbb05bc5\"\u003e\u003ccode\u003e6f22eab\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/laurents/slowapi/issues/212\"\u003e#212\u003c/a\u003e from ecly/release-v0.1.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/5e2b9c108f79471fc96a5152bb69774894660cd1\"\u003e\u003ccode\u003e5e2b9c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/laurents/slowapi/issues/238\"\u003e#238\u003c/a\u003e from laurentS/drop-old-python\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/a83ec7211ea664fcb65580a386845832c112892d\"\u003e\u003ccode\u003ea83ec72\u003c/code\u003e\u003c/a\u003e Update README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/d1a20b6a4e0ba063bdb2160379be531c385c40a3\"\u003e\u003ccode\u003ed1a20b6\u003c/code\u003e\u003c/a\u003e Drop python 3.7 and 3.8 from CI checks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/8bf8b2ec55677aa3c9e0f9bed9f1a48f0b0b8d2e\"\u003e\u003ccode\u003e8bf8b2e\u003c/code\u003e\u003c/a\u003e Make exempt_when with request backwards compatible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/eaf5ba76cd8657693bcec6dec281a35053b1164b\"\u003e\u003ccode\u003eeaf5ba7\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/a72bcc66597f620f04bf5be3676e40ed308d3a6a\"\u003e\u003ccode\u003ea72bcc6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/laurents/slowapi/issues/160\"\u003e#160\u003c/a\u003e from colin99d/master\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/42330fcddbf5ce22d18622ca14772cff256c2e74\"\u003e\u003ccode\u003e42330fc\u003c/code\u003e\u003c/a\u003e Merge branch 'laurentS:master' into master\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/91145c087d658b6c3404935cd02155e291c2682b\"\u003e\u003ccode\u003e91145c0\u003c/code\u003e\u003c/a\u003e Fixed mypy error\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/laurents/slowapi/compare/v0.1.9...v0.1.10\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.54.0 to 2.63.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.63.0\u003c/h2\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eFastapi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent double wrapping of sync handlers on FastAPI \u0026gt;= 0.137 by \u003ca href=\"https://github.com/jhonny-on\"\u003e\u003ccode\u003e@​jhonny-on\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6569\"\u003e#6569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse effective_route_context path for prefixed routers by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6572\"\u003e#6572\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(asgi) Gate query string and client IP behind send_default_pii by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6501\"\u003e#6501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(serializer) Avoid creating reference cycles on every call by \u003ca href=\"https://github.com/Malkiz223\"\u003e\u003ccode\u003e@​Malkiz223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6563\"\u003e#6563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(user) Set \u003ccode\u003euser.ip_address\u003c/code\u003e on telemetry if present by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6555\"\u003e#6555\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove 0000 trace_id fallbacks by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6570\"\u003e#6570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMANIFEST.in: Graft tests directory. by \u003ca href=\"https://github.com/charlesroelli\"\u003e\u003ccode\u003e@​charlesroelli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6237\"\u003e#6237\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(fastapi) Verify request info capture with POST endpoints by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6287\"\u003e#6287\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Verify request info capture with POST endpoints by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6269\"\u003e#6269\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.62.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd integration for \u003ccode\u003eaiomysql\u003c/code\u003e by \u003ca href=\"https://github.com/tonal\"\u003e\u003ccode\u003e@​tonal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/4703\"\u003e#4703\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWe're adding support for the \u003ccode\u003eaiomysql\u003c/code\u003e package. To enable the integration, add it to your \u003ccode\u003eintegrations\u003c/code\u003e list:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.aiomysql import AioMySQLIntegration\n\u003cp\u003esentry_sdk.init(\ntraces_sample_rate=1.0,\nintegrations=[AioMySQLIntegration()],\n)\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport HTTPX2 by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https:...\n\n_Description has been truncated_","html_url":"https://github.com/Dashtid/portfolio-site/pull/108","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dashtid%2Fportfolio-site/issues/108","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/108/packages"},{"uuid":"4689083271","node_id":"PR_kwDOMCX0T87nxRvK","number":161,"state":"closed","title":"Bump filelock from 3.29.3 to 3.29.4","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-04T21:24:20.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-18T04:13:34.000Z","updated_at":"2026-07-04T21:24:21.000Z","time_to_close":1444246,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"filelock","old_version":"3.29.3","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.29.3 to 3.29.4.\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.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\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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.3...3.29.4\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.29.3\u0026new-version=3.29.4)](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/DecaturMakers/machine-access-control/pull/161","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/DecaturMakers%2Fmachine-access-control/issues/161","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/161/packages"},{"uuid":"4664377401","node_id":"PR_kwDOAMpNN87mf5cl","number":12936,"state":"open","title":"Bump filelock from 3.29.3 to 3.29.4","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-15T10:51:46.000Z","updated_at":"2026-06-15T11:04:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"filelock","old_version":"3.29.3","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.29.3 to 3.29.4.\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.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\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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.3...3.29.4\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.29.3\u0026new-version=3.29.4)](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/aio-libs/aiohttp/pull/12936","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/aio-libs%2Faiohttp/issues/12936","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12936/packages"},{"uuid":"4662550654","node_id":"PR_kwDOSJGIYs7mZ3Cy","number":38,"state":"open","title":"chore(deps-dev)(deps-dev): Bump the dev-dependencies group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-15T06:17:23.000Z","updated_at":"2026-06-15T06:18:25.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps-dev)(deps-dev): Bump","group_name":"dev-dependencies","update_count":16,"packages":[{"name":"ruff","old_version":"0.15.11","new_version":"0.15.17","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.0","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pip-audit","old_version":"2.10.0","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"},{"name":"coverage","old_version":"7.13.5","new_version":"7.14.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"cyclonedx-python-lib","old_version":"11.7.0","new_version":"11.10.0","repository_url":"https://github.com/CycloneDX/cyclonedx-python-lib"},{"name":"distlib","old_version":"0.4.0","new_version":"0.4.3","repository_url":"https://github.com/pypa/distlib"},{"name":"filelock","old_version":"3.29.0","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"msgpack","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"packaging","old_version":"26.1","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pip","old_version":"26.0.1","new_version":"26.1.2","repository_url":"https://github.com/pypa/pip"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"python-discovery","old_version":"1.2.2","new_version":"1.4.2","repository_url":"https://github.com/tox-dev/python-discovery"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"ty","old_version":"0.0.32","new_version":"0.0.49","repository_url":"https://github.com/astral-sh/ty"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"virtualenv","old_version":"21.2.4","new_version":"21.5.0","repository_url":"https://github.com/pypa/virtualenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dev-dependencies group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.17` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.0` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.10.0` | `2.10.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.5` | `7.14.1` |\n| [cyclonedx-python-lib](https://github.com/CycloneDX/cyclonedx-python-lib) | `11.7.0` | `11.10.0` |\n| [distlib](https://github.com/pypa/distlib) | `0.4.0` | `0.4.3` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.0` | `3.29.4` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.1.2` | `1.2.0` |\n| [packaging](https://github.com/pypa/packaging) | `26.1` | `26.2` |\n| [pip](https://github.com/pypa/pip) | `26.0.1` | `26.1.2` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [python-discovery](https://github.com/tox-dev/python-discovery) | `1.2.2` | `1.4.2` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.32` | `0.0.49` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.2.4` | `21.5.0` |\n\n\nUpdates `ruff` from 0.15.11 to 0.15.17\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.17\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-11.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25614\"\u003e#25614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eignore\u003c/code\u003e comments within a \u003ccode\u003edisable\u003c/code\u003e/\u003ccode\u003eenable\u003c/code\u003e pair (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25845\"\u003e#25845\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrioritize human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25869\"\u003e#25869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRespect diagnostic start and parent ranges and trailing comments in \u003ccode\u003eruff:ignore\u003c/code\u003e suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25673\"\u003e#25673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Add \u003ccode\u003etrio.as_safe_channel\u003c/code\u003e to safe decorators (\u003ccode\u003eASYNC119\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25775\"\u003e#25775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pytest-style\u003c/code\u003e] Also check \u003ccode\u003epytest_asyncio\u003c/code\u003e fixtures (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25375\"\u003e#25375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Ban \u003ccode\u003epytest\u003c/code\u003e autouse fixtures (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25477\"\u003e#25477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e automatically (\u003ccode\u003eUP007\u003c/code\u003e, \u003ccode\u003eUP045\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23259\"\u003e#23259\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix diagnostic when \u003ccode\u003eruff:enable\u003c/code\u003e or \u003ccode\u003eruff:disable\u003c/code\u003e appears where \u003ccode\u003eruff:ignore\u003c/code\u003e is expected (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25700\"\u003e#25700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Preserve leading empty literals to avoid syntax errors (\u003ccode\u003eUP032\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25491\"\u003e#25491\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-pytest-style\u003c/code\u003e] Clarify diagnostic message for single parameters (\u003ccode\u003ePT007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25592\"\u003e#25592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003enumpy\u003c/code\u003e] Drop autofix for \u003ccode\u003enp.in1d\u003c/code\u003e (\u003ccode\u003eNPY201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25612\"\u003e#25612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Exempt Python version comparisons (\u003ccode\u003ePLR2004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25743\"\u003e#25743\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReserve AST \u003ccode\u003eVec\u003c/code\u003es with correct capacity for common cases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25451\"\u003e#25451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve whitespace for Quarto cell option comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25641\"\u003e#25641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rule names in \u003ccode\u003eruff rule\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25640\"\u003e#25640\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix playground diagnostics scrollbars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25642\"\u003e#25642\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/SuryanshSS1011\"\u003e\u003ccode\u003e@​SuryanshSS1011\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/romero-deshaw\"\u003e\u003ccode\u003e@​romero-deshaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/karlhillx\"\u003e\u003ccode\u003e@​karlhillx\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carljm\"\u003e\u003ccode\u003e@​carljm\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.17\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-11.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25614\"\u003e#25614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eignore\u003c/code\u003e comments within a \u003ccode\u003edisable\u003c/code\u003e/\u003ccode\u003eenable\u003c/code\u003e pair (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25845\"\u003e#25845\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrioritize human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25869\"\u003e#25869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRespect diagnostic start and parent ranges and trailing comments in \u003ccode\u003eruff:ignore\u003c/code\u003e suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25673\"\u003e#25673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Add \u003ccode\u003etrio.as_safe_channel\u003c/code\u003e to safe decorators (\u003ccode\u003eASYNC119\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25775\"\u003e#25775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pytest-style\u003c/code\u003e] Also check \u003ccode\u003epytest_asyncio\u003c/code\u003e fixtures (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25375\"\u003e#25375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Ban \u003ccode\u003epytest\u003c/code\u003e autouse fixtures (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25477\"\u003e#25477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e automatically (\u003ccode\u003eUP007\u003c/code\u003e, \u003ccode\u003eUP045\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23259\"\u003e#23259\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix diagnostic when \u003ccode\u003eruff:enable\u003c/code\u003e or \u003ccode\u003eruff:disable\u003c/code\u003e appears where \u003ccode\u003eruff:ignore\u003c/code\u003e is expected (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25700\"\u003e#25700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Preserve leading empty literals to avoid syntax errors (\u003ccode\u003eUP032\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25491\"\u003e#25491\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-pytest-style\u003c/code\u003e] Clarify diagnostic message for single parameters (\u003ccode\u003ePT007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25592\"\u003e#25592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003enumpy\u003c/code\u003e] Drop autofix for \u003ccode\u003enp.in1d\u003c/code\u003e (\u003ccode\u003eNPY201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25612\"\u003e#25612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Exempt Python version comparisons (\u003ccode\u003ePLR2004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25743\"\u003e#25743\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReserve AST \u003ccode\u003eVec\u003c/code\u003es with correct capacity for common cases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25451\"\u003e#25451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve whitespace for Quarto cell option comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25641\"\u003e#25641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rule names in \u003ccode\u003eruff rule\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25640\"\u003e#25640\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix playground diagnostics scrollbars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25642\"\u003e#25642\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/SuryanshSS1011\"\u003e\u003ccode\u003e@​SuryanshSS1011\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/romero-deshaw\"\u003e\u003ccode\u003e@​romero-deshaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/karlhillx\"\u003e\u003ccode\u003e@​karlhillx\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carljm\"\u003e\u003ccode\u003e@​carljm\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7c645a9a1be8258b9f9e005208a55a0b7e8e18f0\"\u003e\u003ccode\u003e7c645a9\u003c/code\u003e\u003c/a\u003e Bump 0.15.17 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25872\"\u003e#25872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f381eb1d54997cfbfa6f63c15dd2d760f70e85e1\"\u003e\u003ccode\u003ef381eb1\u003c/code\u003e\u003c/a\u003e Prioritize human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25869\"\u003e#25869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b9b4546ad27d8fd12acc979e312a3ee25ef8ac4f\"\u003e\u003ccode\u003eb9b4546\u003c/code\u003e\u003c/a\u003e Minor workflow simplification (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25870\"\u003e#25870\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1e77ba02570bbe4952f7cf0e4ebb97b8b4e6e58d\"\u003e\u003ccode\u003e1e77ba0\u003c/code\u003e\u003c/a\u003e [ty] Move \u003ccode\u003ePreformattedBlockScanner\u003c/code\u003e to format-agnostic location. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25856\"\u003e#25856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f2b772285aa478e8aee3f4b54dfa9ce903a0ce1\"\u003e\u003ccode\u003e6f2b772\u003c/code\u003e\u003c/a\u003e [ty] Preserve nominal type of enum.property instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25849\"\u003e#25849\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/be4777c8766a38d405a69948989cdfa2674adaae\"\u003e\u003ccode\u003ebe4777c\u003c/code\u003e\u003c/a\u003e [ty] Fix site-package error when multiple versions of pythons are installed i...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/53f6ff7200983a67778fcba7106019d2615846f0\"\u003e\u003ccode\u003e53f6ff7\u003c/code\u003e\u003c/a\u003e Allow human-readable names in suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25614\"\u003e#25614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/67403254192f3541bd7e1027c8f1805cf7a9c2be\"\u003e\u003ccode\u003e6740325\u003c/code\u003e\u003c/a\u003e [ty] Restrict uncached raw signature access (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25866\"\u003e#25866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/970b1bf4a4d83359c9e28cad5f127ebbd6769682\"\u003e\u003ccode\u003e970b1bf\u003c/code\u003e\u003c/a\u003e Auto-update snapshots when syncing typeshed (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25841\"\u003e#25841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0785793750fd6c74124a189259822f1a28eb5c13\"\u003e\u003ccode\u003e0785793\u003c/code\u003e\u003c/a\u003e Fix handling of \u003ccode\u003eignore\u003c/code\u003e comments within a \u003ccode\u003edisable\u003c/code\u003e/\u003ccode\u003eenable\u003c/code\u003e pair (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25845\"\u003e#25845\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.17\"\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.3 to 9.1.0\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.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\u003cp\u003eUse the \u003ccode\u003enode\u003c/code\u003e parameter instead for fixture scoping. This enables more robust node-based\nmatching instead of string prefix matching.\nIf you've used \u003ccode\u003enodeid=None\u003c/code\u003e, pass \u003ccode\u003enode=session\u003c/code\u003e instead.\u003c/p\u003e\n\u003cp\u003eThis will be removed in pytest 10.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14335\"\u003e#14335\u003c/a\u003e: The method of configuring hooks using markers, deprecated since pytest 7.2, is now scheduled to be removed in pytest 10.\nSee \u003ccode\u003ehook-markers\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/14434\"\u003e#14434\u003c/a\u003e: The \u003ccode\u003e--pastebin\u003c/code\u003e option is now deprecated.\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/b2522cf0b11fb33ecc1f4895fa1dffbb9252a63d\"\u003e\u003ccode\u003eb2522cf\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/368d2fca78e86ac79ec269bb078fcb1259a94fed\"\u003e\u003ccode\u003e368d2fc\u003c/code\u003e\u003c/a\u003e [refactor] Tighten \u003ccode\u003eSetComparisonFunction\u003c/code\u003e to \u003ccode\u003eIterator[str]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14587\"\u003e#14587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ff77cd8b66b43a88c26ca54384bbcab72d079497\"\u003e\u003ccode\u003eff77cd8\u003c/code\u003e\u003c/a\u003e [refactor] Make base assertion comparisons return an iterator instead of a li...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d8491a4ecf971800de0479ef55c7f5292c54937\"\u003e\u003ccode\u003e0d8491a\u003c/code\u003e\u003c/a\u003e build(deps): Bump actions/stale from 10.2.0 to 10.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/4a809d9c892f6abb5ba92b77b06f1dd878f4660a\"\u003e\u003ccode\u003e4a809d9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14568\"\u003e#14568\u003c/a\u003e from pytest-dev/register-fixture\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/5dfa38541becfb77d0f52cac4cc8cce71849ab61\"\u003e\u003ccode\u003e5dfa385\u003c/code\u003e\u003c/a\u003e Fix recursion traceback test to cover all styles (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14582\"\u003e#14582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f52ff0c1778c15038cf2bbb00b7668dac674cc26\"\u003e\u003ccode\u003ef52ff0c\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003epytest.register_fixture\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/a8ac094e80df788aec844794170b126eab0be7a4\"\u003e\u003ccode\u003ea8ac094\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14567\"\u003e#14567\u003c/a\u003e from pytest-dev/more-visibility-deprecate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e5620cd21ec62f5a5f9a5141a3c76fb3953729b6\"\u003e\u003ccode\u003ee5620cd\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14577\"\u003e#14577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2ce9c6d94eb691ea4da7f91f330602cbb67a6daf\"\u003e\u003ccode\u003e2ce9c6d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14540\"\u003e#14540\u003c/a\u003e from minbang930/fix-14533-doctest-module-fixtures\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.3...9.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pip-audit` from 2.10.0 to 2.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/releases\"\u003epip-audit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\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/pip-audit/blob/main/CHANGELOG.md\"\u003epip-audit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[2.10.1]\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\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/pip-audit/commit/8894eb8cee033531a1fbd9f2fb160892531c14e3\"\u003e\u003ccode\u003e8894eb8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1056\"\u003e#1056\u003c/a\u003e from pypa/copilot/release-2101\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/1c625b7f4fd5790e6a05723b2ad9e670629a061d\"\u003e\u003ccode\u003e1c625b7\u003c/code\u003e\u003c/a\u003e Update version in README.md to 2.10.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/fd2094bb7b58438176d65722d77c021750a16f84\"\u003e\u003ccode\u003efd2094b\u003c/code\u003e\u003c/a\u003e Prep 2.10.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/58d24880a0053c9ec3ce7e3c35aef6d51d600921\"\u003e\u003ccode\u003e58d2488\u003c/code\u003e\u003c/a\u003e build(deps): bump github/codeql-action from 4.35.2 to 4.36.1 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1052\"\u003e#1052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8df942058831baec6258f712d42a0bcb03729134\"\u003e\u003ccode\u003e8df9420\u003c/code\u003e\u003c/a\u003e build(deps): bump zizmorcore/zizmor-action from 0.5.3 to 0.5.6 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/3f618d3cde900cd89545d6a3fa4d41612f3b83df\"\u003e\u003ccode\u003e3f618d3\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1053\"\u003e#1053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/4849132c9ec7a2b0b160ec4276408659d0cdcede\"\u003e\u003ccode\u003e4849132\u003c/code\u003e\u003c/a\u003e Restrict OIDC token to publish job (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/c1eb69a71306be7a3ffbbf2bdb59a4cb4eeaa414\"\u003e\u003ccode\u003ec1eb69a\u003c/code\u003e\u003c/a\u003e Fix KeyError when OSV affected entry omits optional \u003ccode\u003eranges\u003c/code\u003e field (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/68de07fb9637027f61df7df2620da93f9deb11ec\"\u003e\u003ccode\u003e68de07f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1054\"\u003e#1054\u003c/a\u003e from pypa/fix/1047\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/ef31c9ea7ae844d6f9c1f85efceb9d4a2533ef5a\"\u003e\u003ccode\u003eef31c9e\u003c/code\u003e\u003c/a\u003e Formatting fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/pip-audit/compare/v2.10.0...v2.10.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.13.5 to 7.14.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.14.1 — 2026-05-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the HTML report used typographic niceties to make file paths more\nreadable by adding a small amount of space around slashes. Those spaces\ninterfered with searching the page for file paths of interest. Now the report\nuses CSS to accomplish the same visual tweak so that searches with slashes\nwork correctly. Closes \u003ccode\u003eissue 2170\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAdd a 3.16 PyPI classifier \u0026lt;hugo-316_\u0026gt;\u003c/code\u003e_ since we test on the 3.16 main\nbranch.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2170: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2170\"\u003ecoveragepy/coveragepy#2170\u003c/a\u003e\n.. _hugo-316: \u003ca href=\"https://mastodon.social/@hugovk/116588523571204490\"\u003ehttps://mastodon.social/@​hugovk/116588523571204490\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-0:\u003c/p\u003e\n\u003ch2\u003eVersion 7.14.0 — 2026-05-10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFeature: now when running one of the reporting commands, if there are\nparallel data files that need combining, they will be implicitly combined\nbefore creating the report. There is no option to avoid the combination; let\nus know if you have a use case that requires it.  Thanks, \u003ccode\u003eTim Hatch \u0026lt;pull 2162_\u0026gt;\u003c/code\u003e\u003cem\u003e. Closes \u003ccode\u003eissue 1781\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the output from \u003ccode\u003ecombine\u003c/code\u003e was too verbose, listing each file\nconsidered. Now it shows a single line with the counts of files combined,\nfiles skipped, and files with errors. The \u003ccode\u003e-q\u003c/code\u003e flag suppresses this line.\nThe old detailed lines are available with the new \u003ccode\u003e--debug=combine\u003c/code\u003e option.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: running a Python file through a symlink now sets the sys.path correctly,\nmatching regular Python behavior. Fixes \u003ccode\u003eissue 2157\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003eCollector.flush_data\u003c/code\u003e could fail with \u0026quot;RuntimeError: Set changed\nsize during iteration\u0026quot; when a tracer in another thread added a line to the\nper-file set that \u003ccode\u003eadd_lines\u003c/code\u003e (or \u003ccode\u003eadd_arcs\u003c/code\u003e) was iterating. The values\npassed to \u003ccode\u003eCoverageData\u003c/code\u003e are now snapshotted via \u003ccode\u003edict.copy()\u003c/code\u003e and\n\u003ccode\u003eset.copy()\u003c/code\u003e, which are atomic under the GIL. Thanks, \u003ccode\u003eAlex Vandiver \u0026lt;pull 2165_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the soft keyword \u003ccode\u003elazy\u003c/code\u003e is now bolded in HTML reports.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWe are no longer testing eventlet support. Eventlet started issuing stern\ndeprecation warnings that break our tests. Our support code is still there.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 1781: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/1781\"\u003ecoveragepy/coveragepy#1781\u003c/a\u003e\n.. _issue 2157: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2157\"\u003ecoveragepy/coveragepy#2157\u003c/a\u003e\n.. _pull 2162: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2162\"\u003ecoveragepy/coveragepy#2162\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/64d9b66fd852c1920ffe6cb8b58d7e4fdae90226\"\u003e\u003ccode\u003e64d9b66\u003c/code\u003e\u003c/a\u003e docs: correct the date for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6fa7dd44c25e1a660252faaf030dd8f2f1e20861\"\u003e\u003ccode\u003e6fa7dd4\u003c/code\u003e\u003c/a\u003e chore: bump actions/dependency-review-action (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2181\"\u003e#2181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/078afae263597b004eb9a85d880b6a65008e75ed\"\u003e\u003ccode\u003e078afae\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/cb4f028a36e008b664739d04f387b90ee5105044\"\u003e\u003ccode\u003ecb4f028\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ae2d09f562271c6169534e1c242d015dd0823dda\"\u003e\u003ccode\u003eae2d09f\u003c/code\u003e\u003c/a\u003e Merge branch 'nedbat/classifire-316-kits'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2c3568b2e041f2c0dbbc8eaa3919d46ee891b743\"\u003e\u003ccode\u003e2c3568b\u003c/code\u003e\u003c/a\u003e build: declare 3.16 compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/faa68f8601cf098701b68976dbb73b9fc23c9297\"\u003e\u003ccode\u003efaa68f8\u003c/code\u003e\u003c/a\u003e chore: bump github/codeql-action in the action-dependencies group (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2173\"\u003e#2173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/eb55feedf54b363e3d0b678f20abf3bfd3551a88\"\u003e\u003ccode\u003eeb55fee\u003c/code\u003e\u003c/a\u003e test: we don't need PyPy \u0026lt; 7.3.22 anymore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ac168fe53c04cdb2ff5231c0c4e5045021ee339b\"\u003e\u003ccode\u003eac168fe\u003c/code\u003e\u003c/a\u003e test: the text summary should show missing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/fed4bd2db3c1cb2916a07791041da693fbf8e996\"\u003e\u003ccode\u003efed4bd2\u003c/code\u003e\u003c/a\u003e chore: upgrade virtualenv\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.13.5...7.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cyclonedx-python-lib` from 11.7.0 to 11.10.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/releases\"\u003ecyclonedx-python-lib's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev11.10.0 (2026-06-11)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eLossless flattening of dependency graph during JSON serialization (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/993\"\u003e#993\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/d0e10ca147dfece8bd7c76b104d7579255879679\"\u003e\u003ccode\u003ed0e10ca\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eTyping in \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/998\"\u003e#998\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/988a9372a676358b29e67573c9f39d94121824bc\"\u003e\u003ccode\u003e988a937\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove docs of \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/996\"\u003e#996\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/9beaf5c6b35a8739727572c0e351063849d876fc\"\u003e\u003ccode\u003e9beaf5c\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/997\"\u003e#997\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/78b8d8b94b26df14d0194b3d44a5db8a76f1fa47\"\u003e\u003ccode\u003e78b8d8b\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove \u003ccode\u003eoutput.BomRefDiscriminator\u003c/code\u003e to \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/995\"\u003e#995\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/3bb87aabbc421aabac307305217c7975e63b43eb\"\u003e\u003ccode\u003e3bb87aa\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003econtrib.bom.utils.bomdependencygraphflatmerger._flatten_merge\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/999\"\u003e#999\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/a8579b87f7e121ebbec16b9f05bdb3b4de11e71c\"\u003e\u003ccode\u003ea8579b8\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: move \u003ccode\u003eoutput.BomRefDiscriminator\u003c/code\u003e to \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/995\"\u003eCycloneDX/cyclonedx-python-lib#995\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: improve docs of \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/996\"\u003eCycloneDX/cyclonedx-python-lib#996\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/997\"\u003eCycloneDX/cyclonedx-python-lib#997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typing in \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/998\"\u003eCycloneDX/cyclonedx-python-lib#998\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger._flatten_merge\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/999\"\u003eCycloneDX/cyclonedx-python-lib#999\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: lossless flattening of dependency graph during JSON serialization by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/993\"\u003eCycloneDX/cyclonedx-python-lib#993\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.9.0...v11.10.0\"\u003ehttps://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.9.0...v11.10.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev11.9.0 (2026-06-08)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for license expression details (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/908\"\u003e#908\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/b50238102553dc215b08796ea914072294f69489\"\u003e\u003ccode\u003eb502381\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(deps): bump snok/install-poetry from 1.4.1 to 1.4.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/990\"\u003eCycloneDX/cyclonedx-python-lib#990\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): update m2r2 requirement from \u0026gt;=0.3.2 to \u0026gt;=0.3.4 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/CycloneDX/cyclonedx-python-lib/pull/970\"\u003eCycloneDX/cyclonedx-python-lib#970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for license expression details by \u003ca href=\"https://github.com/Churro\"\u003e\u003ccode\u003e@​Churro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/908\"\u003eCycloneDX/cyclonedx-python-lib#908\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.8.0...v11.9.0\"\u003ehttps://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.8.0...v11.9.0\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/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md\"\u003ecyclonedx-python-lib's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev11.10.0 (2026-06-11)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eLossless flattening of dependency graph during JSON serialization\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/993\"\u003e#993\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/d0e10ca147dfece8bd7c76b104d7579255879679\"\u003e\u003ccode\u003ed0e10ca\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eTyping in \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/998\"\u003e#998\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/988a9372a676358b29e67573c9f39d94121824bc\"\u003e\u003ccode\u003e988a937\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove docs of \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/996\"\u003e#996\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/9beaf5c6b35a8739727572c0e351063849d876fc\"\u003e\u003ccode\u003e9beaf5c\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/997\"\u003e#997\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/78b8d8b94b26df14d0194b3d44a5db8a76f1fa47\"\u003e\u003ccode\u003e78b8d8b\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove \u003ccode\u003eoutput.BomRefDiscriminator\u003c/code\u003e to \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/995\"\u003e#995\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/3bb87aabbc421aabac307305217c7975e63b43eb\"\u003e\u003ccode\u003e3bb87aa\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003econtrib.bom.utils.bomdependencygraphflatmerger._flatten_merge\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/999\"\u003e#999\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/a8579b87f7e121ebbec16b9f05bdb3b4de11e71c\"\u003e\u003ccode\u003ea8579b8\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev11.9.0 (2026-06-08)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for license expression details\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/908\"\u003e#908\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/b50238102553dc215b08796ea914072294f69489\"\u003e\u003ccode\u003eb502381\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev11.8.0 (2026-06-04)\u003c/h2\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CDX summary (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/951\"\u003e#951\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/752b1620a23e319add81c505fe7197a2ae3cca06\"\u003e\u003ccode\u003e752b162\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/CycloneDX/cyclonedx-python-lib/commit/bdeaa91c5319e1771a543dd2b562fc5e3d93548b\"\u003e\u003ccode\u003ebdeaa91\u003c/code\u003e\u003c/a\u003e chore(release): 11.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/d0e10ca147dfece8bd7c76b104d7579255879679\"\u003e\u003ccode\u003ed0e10ca\u003c/code\u003e\u003c/a\u003e fix: lossless flattening of dependency graph during JSON serialization (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/993\"\u003e#993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/a8579b87f7e121ebbec16b9f05bdb3b4de11e71c\"\u003e\u003ccode\u003ea8579b8\u003c/code\u003e\u003c/a\u003e perf: \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger._flatten_merge\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/999\"\u003e#999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/988a9372a676358b29e67573c9f39d94121824bc\"\u003e\u003ccode\u003e988a937\u003c/code\u003e\u003c/a\u003e fix: typing in \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/998\"\u003e#998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/78b8d8b94b26df14d0194b3d44a5db8a76f1fa47\"\u003e\u003ccode\u003e78b8d8b\u003c/code\u003e\u003c/a\u003e feat: add \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/997\"\u003e#997\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/9beaf5c6b35a8739727572c0e351063849d876fc\"\u003e\u003ccode\u003e9beaf5c\u003c/code\u003e\u003c/a\u003e docs: improve docs of \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/996\"\u003e#996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/3bb87aabbc421aabac307305217c7975e63b43eb\"\u003e\u003ccode\u003e3bb87aa\u003c/code\u003e\u003c/a\u003e feat: move \u003ccode\u003eoutput.BomRefDiscriminator\u003c/code\u003e to `contrib.bom.utils.BomRefDiscrimin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/150777e13421c2838b27ff926653e24094d3f75d\"\u003e\u003ccode\u003e150777e\u003c/code\u003e\u003c/a\u003e chore(release): 11.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/b50238102553dc215b08796ea914072294f69489\"\u003e\u003ccode\u003eb502381\u003c/code\u003e\u003c/a\u003e feat: add support for license expression details (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/908\"\u003e#908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/2ce770fb1b337a97e3a0eb340f539ebc85902e17\"\u003e\u003ccode\u003e2ce770f\u003c/code\u003e\u003c/a\u003e chore(deps): update m2r2 requirement from \u0026gt;=0.3.2 to \u0026gt;=0.3.4 (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/970\"\u003e#970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.7.0...v11.10.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.29.0 to 3.29.4\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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e by \u003ca href=\"https://github.com/MrAnno\"\u003e\u003ccode\u003e@​MrAnno\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/540\"\u003etox-dev/filelock#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration by \u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/543\"\u003etox-dev/filelock#543\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/542\"\u003etox-dev/filelock#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/544\"\u003etox-dev/filelock#544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/545\"\u003etox-dev/filelock#545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the 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/548\"\u003etox-dev/filelock#548\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/MrAnno\"\u003e\u003ccode\u003e@​MrAnno\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/540\"\u003etox-dev/filelock#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/543\"\u003etox-dev/filelock#543\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/542\"\u003etox-dev/filelock#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/548\"\u003etox-dev/filelock#548\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/85e73d7f0575e30a3d94a00452255e381c7b8eb3\"\u003e\u003ccode\u003e85e73d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): publish from release.yaml on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f86dcb1abca36bb02b65232d411d7e8dce8569e6\"\u003e\u003ccode\u003ef86dcb1\u003c/code\u003e\u003c/a\u003e Release 3.29.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/643bdbe89bff3c61e29d14d7657d045bb89ade6d\"\u003e\u003ccode\u003e643bdbe\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): restore release environment on tag job (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/559\"\u003e#559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7a8f74a904cf7d98b6baf24eb37175d128a5f818\"\u003e\u003ccode\u003e7a8f74a\u003c/code\u003e\u003c/a\u003e validate pid range in _parse_lock_holder (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/556\"\u003e#556\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d1d49a0b232a6d904ff29b22213834df75ffc59b\"\u003e\u003ccode\u003ed1d49a0\u003c/code\u003e\u003c/a\u003e 🔧 ci(release): publish to PyPI on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b37e162e316ec0ef6e5b8c37a1c04bdaaa411487\"\u003e\u003ccode\u003eb37e162\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/558\"\u003e#558\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d9216dea26f31d369c7d3422bfe14c08b51232f1\"\u003e\u003ccode\u003ed9216de\u003c/code\u003e\u003c/a\u003e Release 3.29.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.0...3.29.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `msgpack` from 1.1.2 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/msgpack/msgpack-python/releases\"\u003emsgpack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003erelax setuptools version by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/652\"\u003emsgpack/msgpack-python#652\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate setuptools requirements to \u0026gt;=78.1.1 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/653\"\u003emsgpack/msgpack-python#653\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ecython: freethreading_compatible by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/654\"\u003emsgpack/msgpack-python#654\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/656\"\u003emsgpack/msgpack-python#656\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate cython and cibuildwheel by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/658\"\u003emsgpack/msgpack-python#658\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: add riscv64 manylinux/musllinux wheels by \u003ca href=\"https://github.com/justeph\"\u003e\u003ccode\u003e@​justeph\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/664\"\u003emsgpack/msgpack-python#664\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check \u003ccode\u003eunpack_callback_uint32\u003c/code\u003e result by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/666\"\u003emsgpack/msgpack-python#666\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: re-raise existing exception when available by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/667\"\u003emsgpack/msgpack-python#667\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check return code in \u003ccode\u003eunpack_callback_int64\u003c/code\u003e by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/665\"\u003emsgpack/msgpack-python#665\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed README example by \u003ca href=\"https://github.com/vallsv\"\u003e\u003ccode\u003e@​vallsv\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/668\"\u003emsgpack/msgpack-python#668\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group with 6 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/msgpack/msgpack-python/pull/669\"\u003emsgpack/msgpack-python#669\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: use ubuntu-slim for lint by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/670\"\u003emsgpack/msgpack-python#670\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: enforce \u003ccode\u003estrict_map_key\u003c/code\u003e with \u003ccode\u003eobject_pairs_hook\u003c/code\u003e by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/673\"\u003emsgpack/msgpack-python#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise DEFAULT_RECURSE_LIMIT from 511 to 1024 by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/676\"\u003emsgpack/msgpack-python#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: properly handle return codes in \u003ccode\u003epack_timestamp\u003c/code\u003e by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/672\"\u003emsgpack/msgpack-python#672\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: avoid memory leak when decoding invalid nested arrays by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/671\"\u003emsgpack/msgpack-python#671\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing autoreset in Packer.pack_ext_type by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/663\"\u003emsgpack/msgpack-python#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd no-GIL interpreter support by \u003ca href=\"https://github.com/clin1234\"\u003e\u003ccode\u003e@​clin1234\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/641\"\u003emsgpack/msgpack-python#641\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eskip recursion limit test on free-threaded CPython builds by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/679\"\u003emsgpack/msgpack-python#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Timestamp.from_datetime returning wrong value for pre-epoch datetimes by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/662\"\u003emsgpack/msgpack-python#662\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd 3.15 to CI by \u003ca href=\"https://github.com/clin1234\"\u003e\u003ccode\u003e@​clin1234\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/678\"\u003emsgpack/msgpack-python#678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use-after-free in \u003ccode\u003eget_data_from_buffer\u003c/code\u003e by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/677\"\u003emsgpack/msgpack-python#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echange changelog format to markdown by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/680\"\u003emsgpack/msgpack-python#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies 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/msgpack/msgpack-python/pull/684\"\u003emsgpack/msgpack-python#684\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump sys.setrecursionlimit within test_nest_limit_1024 by \u003ca href=\"https://github.com/clin1234\"\u003e\u003ccode\u003e@​clin1234\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/682\"\u003emsgpack/msgpack-python#682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGuard \u003ccode\u003ePacker\u003c/code\u003e buffer protocol hooks with Cython critical sections by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/686\"\u003emsgpack/msgpack-python#686\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHarden \u003ccode\u003eUnpacker.__init__\u003c/code\u003e re-entry cleanup to prevent buffer/context leaks by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/687\"\u003emsgpack/msgpack-python#687\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.0rc1 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/681\"\u003emsgpack/msgpack-python#681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWheels CI hangs for MacOS Intel by \u003ca href=\"https://github.com/crusaderky\"\u003e\u003ccode\u003e@​crusaderky\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/689\"\u003emsgpack/msgpack-python#689\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/cibuildwheel from 3.4.1 to 4.0.0 in the all-dependencies 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/msgpack/msgpack-python/pull/691\"\u003emsgpack/msgpack-python#691\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.0 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/692\"\u003emsgpack/msgpack-python#692\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/justeph\"\u003e\u003ccode\u003e@​justeph\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/664\"\u003emsgpack/msgpack-python#664\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/666\"\u003emsgpack/msgpack-python#666\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vallsv\"\u003e\u003ccode\u003e@​vallsv\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/668\"\u003emsgpack/msgpack-python#668\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/669\"\u003emsgpack/msgpack-python#669\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/676\"\u003emsgpack/msgpack-python#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/663\"\u003emsgpack/msgpack-python#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/clin1234\"\u003e\u003ccode\u003e@​clin1234\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/641\"\u003emsgpack/msgpack-python#641\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/crusaderky\"\u003e\u003ccode\u003e@​crusaderky\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/689\"\u003emsgpack/msgpack-python#689\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.1.2...v1.2.0\"\u003ehttps://github.com/msgpack/msgpack-python/compare/v1.1.2...v1.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.0rc1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003erelax setuptools version by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/652\"\u003emsgpack/msgpack-python#652\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate setuptools requirements to \u0026gt;=78.1.1 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/653\"\u003emsgpack/msgpack-python#653\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/msgpack/msgpack-python/blob/main/CHANGELOG.md\"\u003emsgpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.2.0\u003c/h1\u003e\n\u003cp\u003eRelease Date: 2026-06-11\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport free threaded Python. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/654\"\u003e#654\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/686\"\u003e#686\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/656\"\u003e#656\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing error checks in C code. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/665\"\u003e#665\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/666\"\u003e#666\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/667\"\u003e#667\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/672\"\u003e#672\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003estrict_map_key\u003c/code\u003e option didn't work for \u003ccode\u003eobject_pairs_hook\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/673\"\u003e#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease DEFAULT_RECURSE_LIMIT of Unpacker to 1024. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/676\"\u003e#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix memory leak when Unpacker returns error for invalid input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/671\"\u003e#671\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePacker.pack_ext_type()\u003c/code\u003e ignored \u003ccode\u003eautoreset\u003c/code\u003e option. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTimestamp.from_datetime()\u003c/code\u003e returning wrong value for pre-epoch datetimes. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/662\"\u003e#662\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix use-after-free in \u003ccode\u003eunpackb()\u003c/code\u003e and \u003ccode\u003eUnpacker.unpack()\u003c/code\u003e for non-contiguous input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/677\"\u003e#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix possible memory leak when calling \u003ccode\u003eUnpacker.__init__()\u003c/code\u003e several times. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/687\"\u003e#687\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/msg...\n\n_Description has been truncated_","html_url":"https://github.com/IvanAnishchuk/pyscv/pull/38","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanAnishchuk%2Fpyscv/issues/38","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/38/packages"},{"uuid":"4662294832","node_id":"PR_kwDOSuPaC87mZCZD","number":6,"state":"open","title":"build(deps): Bump the production group across 1 directory with 51 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-15T05:23:22.000Z","updated_at":"2026-06-15T05:23:53.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"production","update_count":51,"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.5.20","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.4.1","repository_url":"https://github.com/pallets/click"},{"name":"cryptography","old_version":"46.0.7","new_version":"49.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.137.0","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.1","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"httptools","old_version":"0.6.4","new_version":"0.8.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.10","new_version":"3.18","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.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.0","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-asyncio","old_version":"0.15.1","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.32","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.34.2","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.20.1"},{"name":"sqlalchemy","old_version":"2.0.40","new_version":"2.0.50","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.3.1","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.26.7","repository_url":"https://github.com/fastapi/typer"},{"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.49.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.2.0","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.4","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.30.0","new_version":"2026.5.1","repository_url":"https://github.com/crate-py/rpds"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production group with 51 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.5.20` |\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.4.1` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.7` | `49.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.137.0` |\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.1` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.6.4` | `0.8.0` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.18` |\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.12.5` | `2.13.4` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.41.5` | `2.47.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.0` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.15.1` | `1.4.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.32` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\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.20.1` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.40` | `2.0.50` |\n| [sqlmodel](https://github.com/fastapi/sqlmodel) | `0.0.22` | `0.0.38` |\n| [starlette](https://github.com/Kludex/starlette) | `0.49.1` | `1.3.1` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.1` | `2.4.1` |\n| [typer](https://github.com/fastapi/typer) | `0.15.2` | `0.26.7` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.30.6` | `0.49.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.2.0` |\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.4` |\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.30.0` | `2026.5.1` |\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.5.20\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\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\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2025.01.31...2026.05.20\"\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.4.1\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.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?closed=1\"\u003ehttps://github.com/pallets/click/milestone/32?closed=1\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 \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.\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.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\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,\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\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/6eeb50e948ea136db145280f6f5dd52eca3fa7e5\"\u003e\u003ccode\u003e6eeb50e\u003c/code\u003e\u003c/a\u003e release version 8.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/67921d5b71584112eebcbf89596b5f0e6d14c49f\"\u003e\u003ccode\u003e67921d5\u003c/code\u003e\u003c/a\u003e change log and doc fixes (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3495\"\u003e#3495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/9c41f46a4015700489ad009266edf1f3893d01d1\"\u003e\u003ccode\u003e9c41f46\u003c/code\u003e\u003c/a\u003e Fix changelog and version admonitions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/6cb34774f20598aa288332f8da02c5aee85448a6\"\u003e\u003ccode\u003e6cb3477\u003c/code\u003e\u003c/a\u003e fix skip condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/5ee8e3123d8ddece6c47eff9a7a7d4ca478c4f37\"\u003e\u003ccode\u003e5ee8e31\u003c/code\u003e\u003c/a\u003e fix I/O operation on closed file error with CliRunner and echo_via_pager (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/becbde5cf416441627f779e8dd34e57738ee1c1f\"\u003e\u003ccode\u003ebecbde5\u003c/code\u003e\u003c/a\u003e pager doesn't close std streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a5f5aa6d4012d256ccca24638f2642fc371e9f77\"\u003e\u003ccode\u003ea5f5aa6\u003c/code\u003e\u003c/a\u003e Handle empty bytes in echo (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3493\"\u003e#3493\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4d3db84b251518e97299a38a5ca4bab3d01873a2\"\u003e\u003ccode\u003e4d3db84\u003c/code\u003e\u003c/a\u003e handle empty bytes in echo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d42f15b71757de791a5781fb179fd972da9169f5\"\u003e\u003ccode\u003ed42f15b\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eget_parameter_source()\u003c/code\u003e during type conversion and eager callbacks (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/0baa8db07736fc7ad3d3eed97d4c73b0059c63e1\"\u003e\u003ccode\u003e0baa8db\u003c/code\u003e\u003c/a\u003e Document ctx.params bypass with test and doc\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.4.1\"\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 49.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\u003e49.0.0 - 2026-06-12\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **BACKWARDS INCOMPATIBLE:** Support for ``x86_64`` macOS has been removed.\n  We now only publish ``arm64`` wheels for macOS.\n* **BACKWARDS INCOMPATIBLE:** Support for 32-bit Windows has been removed.\n  Users should move to a 64-bit Python installation.\n* **BACKWARDS INCOMPATIBLE:** Removed the deprecated\n  ``PUBLIC_KEY_TYPES``, ``PRIVATE_KEY_TYPES``,\n  ``CERTIFICATE_PRIVATE_KEY_TYPES``, ``CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES``,\n  and ``CERTIFICATE_PUBLIC_KEY_TYPES`` type aliases. Use\n  ``PublicKeyTypes``, ``PrivateKeyTypes``, ``CertificateIssuerPrivateKeyTypes``,\n  ``CertificateIssuerPublicKeyTypes``, and ``CertificatePublicKeyTypes``\n  instead. These were deprecated in version 40.0.\n* **BACKWARDS INCOMPATIBLE:** :class:`~cryptography.hazmat.primitives.ciphers.algorithms.ChaCha20`\n  now treats the first 4 bytes of the ``nonce`` as a 32-bit little-endian block\n  counter (as defined in :rfc:`7539`) and tracks the number of bytes processed.\n  Attempting to encrypt or decrypt more data than the counter allows before it\n  would overflow now raises a :class:`ValueError` rather than silently diverging\n  from RFC 7539. Setting the counter portion of the ``nonce`` to zero allows\n  encrypting up to 256 GiB with a given nonce.\n* **BACKWARDS INCOMPATIBLE:** Loading an X.509 certificate whose ECDSA or DSA\n  signature ``AlgorithmIdentifier`` contains encoded NULL parameters now raises\n  a :class:`ValueError`. Such certificates are invalid, but older versions of\n  Java emitted them; previously they loaded with a deprecation warning.\n* Fixed cross-compilation of the CFFI bindings when ``PYO3_CROSS_LIB_DIR``\n  is set. The build now derives the Python include directory from\n  ``PYO3_CROSS_LIB_DIR`` instead of querying the host interpreter, which\n  previously caused the build to fail during cross-compilations for embedded\n  systems, on hosts which have same-version Python development headers\n  installed as the target Python.\n* Added support for signing and verifying X.509 certificates, certificate\n  signing requests, and certificate revocation lists with\n  :doc:`/hazmat/primitives/asymmetric/mldsa` keys, as well as loading\n  certificates that contain ML-DSA public keys.\n* Added :meth:`~cryptography.hazmat.primitives.hpke.KEM.enc_length` to\n  :class:`~cryptography.hazmat.primitives.hpke.KEM` so callers can split the\n  encapsulated key from the ciphertext returned by\n  :meth:`~cryptography.hazmat.primitives.hpke.Suite.encrypt`.\n* :meth:`~cryptography.x509.verification.ExtensionPolicy.require_present`,\n  :meth:`~cryptography.x509.verification.ExtensionPolicy.may_be_present`, and\n  :meth:`~cryptography.x509.verification.ExtensionPolicy.require_not_present`\n  now accept any extension type. Previously only a fixed set of extension\n  types was supported, which made it impossible to account for otherwise\n  unrecognized critical extensions during path validation.\n* Added support for using :class:`~cryptography.x509.Certificate`,\n  :class:`~cryptography.x509.CertificateSigningRequest`, and\n  :class:`~cryptography.x509.CertificateRevocationList` as field types in\n  :doc:`/hazmat/asn1/index` structures.\n* Added :func:`~cryptography.hazmat.asn1.value_set`, a class decorator that\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/e300bbe2f1bec75e5ee7e0ab7b196958831b3db6\"\u003e\u003ccode\u003ee300bbe\u003c/code\u003e\u003c/a\u003e bump version and changelog for 49.0.0 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15030\"\u003e#15030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/fa74cd8031b263edb50307f6d5a9a70df9f0a541\"\u003e\u003ccode\u003efa74cd8\u003c/code\u003e\u003c/a\u003e Add external mu (message representative) support for ML-DSA (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14979\"\u003e#14979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/f594db3f315e621473c58721961f502ba2a286ec\"\u003e\u003ccode\u003ef594db3\u003c/code\u003e\u003c/a\u003e chore(deps): bump openssl from 0.10.80 to 0.10.81 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15029\"\u003e#15029\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/608e0119532153336310e51747724c6b9d107df7\"\u003e\u003ccode\u003e608e011\u003c/code\u003e\u003c/a\u003e chore(deps): bump openssl-sys from 0.9.116 to 0.9.117 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15028\"\u003e#15028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/a322bc4fb2bd2fd6f345fdb155cac226b1770dad\"\u003e\u003ccode\u003ea322bc4\u003c/code\u003e\u003c/a\u003e chore(deps): bump cc from 1.2.63 to 1.2.64 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15027\"\u003e#15027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/33181a74d41aa859b05f3720700a31c8e5b9e54c\"\u003e\u003ccode\u003e33181a7\u003c/code\u003e\u003c/a\u003e Reject critical nameConstraints extensions containing directoryName constrain...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6080dc7f08e7473544b07df95833ff2ee843266e\"\u003e\u003ccode\u003e6080dc7\u003c/code\u003e\u003c/a\u003e Bump dependencies that dependabot isn't (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15026\"\u003e#15026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/121faa33a717559a8b0f0180b2d4e7785234af79\"\u003e\u003ccode\u003e121faa3\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.4.2 to 21.4.3 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15023\"\u003e#15023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/829520baa909eff95d64e5ebd165544d6fd60172\"\u003e\u003ccode\u003e829520b\u003c/code\u003e\u003c/a\u003e Add more robust processing for DH parameters. (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15016\"\u003e#15016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/0f0500141cec535846f36c4c68d02b03126386b5\"\u003e\u003ccode\u003e0f05001\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15025\"\u003e#15025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.7...49.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/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eAttributeError: 'TracebackException' object has no attribute 'exceptions'\u003c/code\u003e when formatting unpickled TBEs from another Python process which did not apply the \u003ccode\u003eexceptiongroup\u003c/code\u003e patches (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/144\"\u003e#144\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e**kwargs\u003c/code\u003e to function and method signatures as appropriate to match the signatures in the standard library\u003c/li\u003e\n\u003cli\u003eIn line with the stdlib typings in typeshed, updated \u003ccode\u003e(Base)ExceptionGroup\u003c/code\u003e generic types to define defaults for their generic arguments (defaulting to \u003ccode\u003eBaseExceptionGroup[BaseException]\u003c/code\u003e and \u003ccode\u003eExceptionGroup[Exception]\u003c/code\u003e) (PR by \u003ca href=\"https://github.com/mikenerone\"\u003e\u003ccode\u003e@​mikenerone\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eBaseExceptionGroup.__init__()\u003c/code\u003e to directly call \u003ccode\u003eBaseException.__init__()\u003c/code\u003e instead of the superclass \u003ccode\u003e__init__()\u003c/code\u003e in order to emulate the CPython behavior (broken or not) (PR by \u003ca href=\"https://github.com/cfbolz\"\u003e\u003ccode\u003e@​cfbolz\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the \u003ccode\u003eexceptions\u003c/code\u003e attribute to always return the same tuple of exceptions, created from the original exceptions sequence passed to \u003ccode\u003eBaseExceptionGroup\u003c/code\u003e to match CPython behavior (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/143\"\u003e#143\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/agronholm/exceptiongroup/blob/main/CHANGES.rst\"\u003eexceptiongroup's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eVersion history\u003c/h1\u003e\n\u003cp\u003eThis library adheres to \u003ccode\u003eSemantic Versioning 2.0 \u0026lt;http://semver.org/\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eUNRELEASED\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed the \u003ccode\u003erepr()\u003c/code\u003e of exception groups being affected by mutation of the\noriginal exception sequence after construction\n(\u003ccode\u003e[#154](https://github.com/agronholm/exceptiongroup/issues/154) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/154\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.3.1\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eAttributeError: 'TracebackException' object has no attribute 'exceptions'\u003c/code\u003e\nwhen formatting unpickled TBEs from another Python process which did not apply the\n\u003ccode\u003eexceptiongroup\u003c/code\u003e patches\n(\u003ccode\u003e[#144](https://github.com/agronholm/exceptiongroup/issues/144) \u0026lt;htt...\n\n_Description has been truncated_","html_url":"https://github.com/KarthikShivasankar/reed-manufacturing-data-space/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarthikShivasankar%2Freed-manufacturing-data-space/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"4655459629","node_id":"PR_kwDOQe0E4M7mEPjM","number":479,"state":"open","title":"chore(deps): bump filelock from 3.29.0 to 3.29.3","user":"dependabot[bot]","labels":[],"assignees":["yasha-dev1"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-13T12:14:36.000Z","updated_at":"2026-06-13T12:14:37.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"filelock","old_version":"3.29.0","new_version":"3.29.3","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.29.0 to 3.29.3.\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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e by \u003ca href=\"https://github.com/MrAnno\"\u003e\u003ccode\u003e@​MrAnno\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/540\"\u003etox-dev/filelock#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration by \u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/543\"\u003etox-dev/filelock#543\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/542\"\u003etox-dev/filelock#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/544\"\u003etox-dev/filelock#544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/545\"\u003etox-dev/filelock#545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the 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/548\"\u003etox-dev/filelock#548\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/MrAnno\"\u003e\u003ccode\u003e@​MrAnno\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/540\"\u003etox-dev/filelock#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/543\"\u003etox-dev/filelock#543\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/542\"\u003etox-dev/filelock#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/548\"\u003etox-dev/filelock#548\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.0...3.29.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.0...3.29.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.0 (2026-04-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows :pr:\u003ccode\u003e534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency :pr:\u003ccode\u003e533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 :pr:\u003ccode\u003e530\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\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/tox-dev/filelock/commit/85e73d7f0575e30a3d94a00452255e381c7b8eb3\"\u003e\u003ccode\u003e85e73d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): publish from release.yaml on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f86dcb1abca36bb02b65232d411d7e8dce8569e6\"\u003e\u003ccode\u003ef86dcb1\u003c/code\u003e\u003c/a\u003e Release 3.29.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/643bdbe89bff3c61e29d14d7657d045bb89ade6d\"\u003e\u003ccode\u003e643bdbe\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): restore release environment on tag job (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/559\"\u003e#559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7a8f74a904cf7d98b6baf24eb37175d128a5f818\"\u003e\u003ccode\u003e7a8f74a\u003c/code\u003e\u003c/a\u003e validate pid range in _parse_lock_holder (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/556\"\u003e#556\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d1d49a0b232a6d904ff29b22213834df75ffc59b\"\u003e\u003ccode\u003ed1d49a0\u003c/code\u003e\u003c/a\u003e 🔧 ci(release): publish to PyPI on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b37e162e316ec0ef6e5b8c37a1c04bdaaa411487\"\u003e\u003ccode\u003eb37e162\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/558\"\u003e#558\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d9216dea26f31d369c7d3422bfe14c08b51232f1\"\u003e\u003ccode\u003ed9216de\u003c/code\u003e\u003c/a\u003e Release 3.29.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/ab6844ddde56e0a93d34d918f90eef6fc74d2c6a\"\u003e\u003ccode\u003eab6844d\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/555\"\u003e#555\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b862ead7201e8a602311bbc29e444db343b07967\"\u003e\u003ccode\u003eb862ead\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/554\"\u003e#554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/2ff7c3cffc5d872a890783890fd6fd3b9fd27643\"\u003e\u003ccode\u003e2ff7c3c\u003c/code\u003e\u003c/a\u003e check hostname in is_lock_held_by_us (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/553\"\u003e#553\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.0...3.29.3\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.29.0\u0026new-version=3.29.3)](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/QualityUnit/pyworkflow/pull/479","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/QualityUnit%2Fpyworkflow/issues/479","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/479/packages"},{"uuid":"4637274648","node_id":"PR_kwDOOTECAM7lJ9Zs","number":6,"state":"open","title":"chore(deps): bump filelock from 3.20.2 to 3.20.3","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-06-11T04:40:58.000Z","updated_at":"2026-06-11T04:52:05.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"filelock","old_version":"3.20.2","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.20.2 to 3.20.3.\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.0 (2026-04-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows :pr:\u003ccode\u003e534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency :pr:\u003ccode\u003e533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 :pr:\u003ccode\u003e530\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\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/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.20.2...3.20.3\"\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=filelock\u0026package-manager=uv\u0026previous-version=3.20.2\u0026new-version=3.20.3)](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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/qsoyq/stash/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/qsoyq/stash/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/qsoyq%2Fstash/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"4636387573","node_id":"PR_kwDORtR3rs7lHOUF","number":5,"state":"open","title":"chore(deps): bump the uv group across 1 directory with 19 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-06-11T01:29:05.000Z","updated_at":"2026-06-11T01:30:14.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv","update_count":19,"packages":[{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"python-dotenv","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"cryptography","old_version":"46.0.3","new_version":"46.0.7","repository_url":"https://github.com/pyca/cryptography"},{"name":"filelock","old_version":"3.20.1","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"idna","old_version":"3.11","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"lxml","old_version":"6.0.2","new_version":"6.1.0","repository_url":"https://github.com/lxml/lxml"},{"name":"marshmallow","old_version":"3.26.1","new_version":"3.26.2","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"mistune","old_version":"3.1.4","new_version":"3.2.1","repository_url":"https://github.com/lepture/mistune"},{"name":"nbconvert","old_version":"7.16.6","new_version":"7.17.1","repository_url":"https://github.com/jupyter/nbconvert"},{"name":"nltk","old_version":"3.9.2","new_version":"3.9.4","repository_url":"https://github.com/nltk/nltk"},{"name":"pypdf","old_version":"6.4.2","new_version":"6.10.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"python-multipart","old_version":"0.0.21","new_version":"0.0.27","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"starlette","old_version":"0.50.0","new_version":"1.0.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"torch","old_version":"2.9.1","new_version":"2.10.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"tornado","old_version":"6.5.4","new_version":"6.5.5","repository_url":"https://github.com/tornadoweb/tornado"},{"name":"urllib3","old_version":"2.6.2","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"virtualenv","old_version":"20.35.4","new_version":"20.36.1","repository_url":"https://github.com/pypa/virtualenv"},{"name":"werkzeug","old_version":"3.1.4","new_version":"3.1.6","repository_url":"https://github.com/pallets/werkzeug"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 19 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.3` | `46.0.7` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.20.1` | `3.20.3` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.15` |\n| [lxml](https://github.com/lxml/lxml) | `6.0.2` | `6.1.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `3.26.2` |\n| [mistune](https://github.com/lepture/mistune) | `3.1.4` | `3.2.1` |\n| [nbconvert](https://github.com/jupyter/nbconvert) | `7.16.6` | `7.17.1` |\n| [nltk](https://github.com/nltk/nltk) | `3.9.2` | `3.9.4` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.4.2` | `6.10.2` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.21` | `0.0.27` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [starlette](https://github.com/Kludex/starlette) | `0.50.0` | `1.0.1` |\n| [torch](https://github.com/pytorch/pytorch) | `2.9.1` | `2.10.0` |\n| [tornado](https://github.com/tornadoweb/tornado) | `6.5.4` | `6.5.5` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.2` | `2.7.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `20.35.4` | `20.36.1` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.4` | `3.1.6` |\n\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue 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/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\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/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\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/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 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/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\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/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\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/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\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.3 to 46.0.7\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\u003e46.0.7 - 2026-04-07\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**: Fixed an issue where non-contiguous buffers could be\n  passed to APIs that accept Python buffers, which could lead to buffer\n  overflow. **CVE-2026-39892**\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.6.\n\u003cp\u003e.. _v46-0-6:\u003c/p\u003e\n\u003cp\u003e46.0.6 - 2026-03-25\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e: Fixed a bug where name constraints were not applied\nto peer names during verification when the leaf certificate contains a\nwildcard DNS SAN. Ordinary X.509 topologies are not affected by this bug,\nincluding those used by the Web PKI. Credit to \u003cstrong\u003eOleh Konko (1seal)\u003c/strong\u003e for\nreporting the issue. \u003cstrong\u003eCVE-2026-34073\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v46-0-5:\u003c/p\u003e\n\u003cp\u003e46.0.5 - 2026-02-10\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* An attacker could create a malicious public key that reveals portions of your\n  private key when using certain uncommon elliptic curves (binary curves).\n  This version now includes additional security checks to prevent this attack.\n  This issue only affects binary elliptic curves, which are rarely used in\n  real-world applications. Credit to **XlabAI Team of Tencent Xuanwu Lab and\n  Atuin Automated Vulnerability Discovery Engine** for reporting the issue.\n  **CVE-2026-26007**\n* Support for ``SECT*`` binary elliptic curves is deprecated and will be\n  removed in the next release.\n\u003cp\u003e.. v46-0-4:\u003c/p\u003e\n\u003cp\u003e46.0.4 - 2026-01-27\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eDropped support for win_arm64 wheels\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eUpdated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.5.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v46-0-3:\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/pyca/cryptography/commit/622d672e429a7cff836a23c5903683dbec1901f5\"\u003e\u003ccode\u003e622d672\u003c/code\u003e\u003c/a\u003e 46.0.7 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14602\"\u003e#14602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/91d728897bdad30cd5c79a2b23e207f1f050d587\"\u003e\u003ccode\u003e91d7288\u003c/code\u003e\u003c/a\u003e Cherry-pick \u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14542\"\u003e#14542\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14543\"\u003e#14543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/06e120e682cb200e3f7050c02f0bcdac90c4c6ad\"\u003e\u003ccode\u003e06e120e\u003c/code\u003e\u003c/a\u003e bump version for 46.0.5 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14289\"\u003e#14289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/0eebb9dbb6343d9bc1d91e5a2482ed4e054a6d8c\"\u003e\u003ccode\u003e0eebb9d\u003c/code\u003e\u003c/a\u003e EC check key on cofactor \u0026gt; 1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14287\"\u003e#14287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/bedf6e186b814f69a3f54f51252c23a71d44ed2e\"\u003e\u003ccode\u003ebedf6e1\u003c/code\u003e\u003c/a\u003e fix openssl version on 46 branch (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14220\"\u003e#14220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/e6f44fc8e6391f05d719fb9d369692325b87a471\"\u003e\u003ccode\u003ee6f44fc\u003c/code\u003e\u003c/a\u003e bump for 46.0.4 and drop win arm64 due to CI issues (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14217\"\u003e#14217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.3...46.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.20.1 to 3.20.3\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Unix systems without O_NOFOLLOW by \u003ca href=\"https://github.com/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/464\"\u003etox-dev/filelock#464\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/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\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.20.1...3.20.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.1...3.20.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.0 (2026-04-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows :pr:\u003ccode\u003e534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency :pr:\u003ccode\u003e533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 :pr:\u003ccode\u003e530\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\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/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2e7d4046b6a2b375a573bcfbad21827b99f8939\"\u003e\u003ccode\u003ef2e7d40\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/50888548eb2f008d372e71f2835a47851ab83836\"\u003e\u003ccode\u003e5088854\u003c/code\u003e\u003c/a\u003e Support Unix systems without O_NOFOLLOW (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.20.1...3.20.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.11 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\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/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.11...v3.15\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `lxml` from 6.0.2 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lxml/lxml/blob/master/CHANGES.txt\"\u003elxml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e6.1.0 (2026-04-17)\u003c/h1\u003e\n\u003cp\u003eThis release fixes a possible external entity injection (XXE) vulnerability in\n\u003ccode\u003eiterparse()\u003c/code\u003e and the \u003ccode\u003eETCompatXMLParser\u003c/code\u003e.\u003c/p\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eGH#486: The HTML ARIA accessibility attributes were added to the set of safe attributes\nin \u003ccode\u003elxml.html.defs\u003c/code\u003e.  This allows \u003ccode\u003elxml_html_clean\u003c/code\u003e to pass them through.\nPatch by oomsveta.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe default chunk size for reading from file-likes in \u003ccode\u003eiterparse()\u003c/code\u003e is now configurable\nwith a new \u003ccode\u003echunk_size\u003c/code\u003e argument.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLP#2146291: The \u003ccode\u003eresolve_entities\u003c/code\u003e option was still set to \u003ccode\u003eTrue\u003c/code\u003e for\n\u003ccode\u003eiterparse\u003c/code\u003e and \u003ccode\u003eETCompatXMLParser\u003c/code\u003e, allowing for external entity injection (XXE)\nwhen using these parsers without setting this option explicitly.\nThe default was now changed to \u003ccode\u003e'internal'\u003c/code\u003e only (as for the normal XML and HTML parsers\nsince lxml 5.0).\nIssue found by Sihao Qiu as CVE-2026-41066.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.0.4 (2026-04-12)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLP#2148019: Spurious MemoryError during namespace cleanup.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.0.3 (2026-04-09)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSeveral out of memory error cases now raise \u003ccode\u003eMemoryError\u003c/code\u003e that were not handled before.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSlicing with large step values (outside of \u003ccode\u003e+/- sys.maxsize\u003c/code\u003e) could trigger undefined C behaviour.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2125399: Some failing tests were fixed or disabled in PyPy.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2138421: Memory leak in error cases when setting the \u003ccode\u003epublic_id\u003c/code\u003e or \u003ccode\u003esystem_url\u003c/code\u003e of a document.\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/lxml/lxml/commit/43722f4402afa48b7890a96ce012eb0b9b1af5be\"\u003e\u003ccode\u003e43722f4\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/87470409b17188a5a7dbefcfa124af9cd792ffaa\"\u003e\u003ccode\u003e8747040\u003c/code\u003e\u003c/a\u003e Name version of option change in docstring.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/6c36e6cef77db5087a1fff1a0d1ca8fed963afe7\"\u003e\u003ccode\u003e6c36e6c\u003c/code\u003e\u003c/a\u003e Fix pypistats URL in download statistics script.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/c7d76d6cb817c8e1f316e43b16cab5e6ad669ad0\"\u003e\u003ccode\u003ec7d76d6\u003c/code\u003e\u003c/a\u003e Change security policy to point to Github security advisories.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/378ccf82db8160928807c55ed580c0443aa94f42\"\u003e\u003ccode\u003e378ccf8\u003c/code\u003e\u003c/a\u003e Update project income report.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/315270b810a9e3276c60daba549299d204ac962b\"\u003e\u003ccode\u003e315270b\u003c/code\u003e\u003c/a\u003e Docs: Reduce TOC depth of package pages and move module contents first.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/6dbba7f3c72f655b05b26ef453fdee31af13ccf5\"\u003e\u003ccode\u003e6dbba7f\u003c/code\u003e\u003c/a\u003e Docs: Show current year in copyright line.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/e4385bfa5d79527350d5ef17372fb70ba80b4cce\"\u003e\u003ccode\u003ee4385bf\u003c/code\u003e\u003c/a\u003e Update project income report.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/5bed1e1a227cd9ba5a879aaeacdf504093a3f6e8\"\u003e\u003ccode\u003e5bed1e1\u003c/code\u003e\u003c/a\u003e Validate file hashes in release download script.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/c13ee10a429f1144779bb1cbf6ae3bec808ae9c1\"\u003e\u003ccode\u003ec13ee10\u003c/code\u003e\u003c/a\u003e Prepare release of 6.1.0.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/lxml/lxml/compare/lxml-6.0.2...lxml-6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 3.26.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.26.2 (2025-12-19)\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:cve:\u003ccode\u003e2025-68480\u003c/code\u003e: Merge error store messages without rebuilding collections.\nThanks 카푸치노 for reporting and :user:\u003ccode\u003edeckar01\u003c/code\u003e for the fix.\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/marshmallow-code/marshmallow/commit/1407d5102ae020421ddc8425474e976325a9539e\"\u003e\u003ccode\u003e1407d51\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2878\"\u003e#2878\u003c/a\u003e from marshmallow-code/3.x-mypy-unreachable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b2292f513845ccbd134bd55501a9bcbcdd18f8ac\"\u003e\u003ccode\u003eb2292f5\u003c/code\u003e\u003c/a\u003e Fix mypy errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8acd211847244fa28e0174728ff310fddf0d7fa2\"\u003e\u003ccode\u003e8acd211\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2877\"\u003e#2877\u003c/a\u003e from marshmallow-code/3.x-delint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b4bcb4a96f16a3b94c1b52ac82a66b57bbee1d88\"\u003e\u003ccode\u003eb4bcb4a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] auto fixes from pre-commit.com hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b78af7a0ea3102f8c2379bebe115a015e4018a62\"\u003e\u003ccode\u003eb78af7a\u003c/code\u003e\u003c/a\u003e Delint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2c4451e5129411da79161add51cfc76fe852549d\"\u003e\u003ccode\u003e2c4451e\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/86d101a1aee2fe0a521c976015d1940437493cde\"\u003e\u003ccode\u003e86d101a\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/489a8d421dc7955bb53b89e962d69465fbc5b6af\"\u003e\u003ccode\u003e489a8d4\u003c/code\u003e\u003c/a\u003e Only deep copy error message collections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/6d4a17dad54ea9711040c6aa6ba4d59267242a41\"\u003e\u003ccode\u003e6d4a17d\u003c/code\u003e\u003c/a\u003e Add test coverage for error message modification\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0356a3f1c307830f8ded56d823abca5611c594c9\"\u003e\u003ccode\u003e0356a3f\u003c/code\u003e\u003c/a\u003e Merge error store messages without rebuilding collections\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...3.26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mistune` from 3.1.4 to 3.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lepture/mistune/releases\"\u003emistune's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.2.1\u003c/h2\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eResolve Windows compatibility issues in file inclusion and tests  -  by \u003ca href=\"https://github.com/Yuki9814\"\u003e\u003ccode\u003e@​Yuki9814\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/2547102\"\u003e\u003c!-- raw HTML omitted --\u003e(25471)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape html text  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/a3cb6e5\"\u003e\u003c!-- raw HTML omitted --\u003e(a3cb6)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate link reference  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/85eb54f\"\u003e\u003c!-- raw HTML omitted --\u003e(85eb5)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle escaped dollar signs in inline math  -  by \u003ca href=\"https://github.com/saschabuehrle\"\u003e\u003ccode\u003e@​saschabuehrle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/lepture/mistune/issues/370\"\u003elepture/mistune#370\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/7bd5709\"\u003e\u003c!-- raw HTML omitted --\u003e(7bd57)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape id of toc  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/04880a0\"\u003e\u003c!-- raw HTML omitted --\u003e(04880)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape id of headings  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/2855622\"\u003e\u003c!-- raw HTML omitted --\u003e(28556)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove double-encoding of image alt text  -  by \u003ca href=\"https://github.com/lawrence3699\"\u003e\u003ccode\u003e@​lawrence3699\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/0d6f3d8\"\u003e\u003c!-- raw HTML omitted --\u003e(0d6f3)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape xml for math plugin  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/5fa092e\"\u003e\u003c!-- raw HTML omitted --\u003e(5fa09)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse strict regex for image's height and width  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/8d0cb75\"\u003e\u003c!-- raw HTML omitted --\u003e(8d0cb)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/lepture/mistune/compare/v3.2.0...v3.2.1\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch3\u003e   🚀 Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport footnotes that start on the next line.  -  by \u003ca href=\"https://github.com/kylechui\"\u003e\u003ccode\u003e@​kylechui\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/2677e2d\"\u003e\u003c!-- raw HTML omitted --\u003e(2677e)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eProperly handle code blocks inside footnotes.  -  by \u003ca href=\"https://github.com/kylechui\"\u003e\u003ccode\u003e@​kylechui\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/0516c9e\"\u003e\u003c!-- raw HTML omitted --\u003e(0516c)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport python 3.14  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/7e0eb65\"\u003e\u003c!-- raw HTML omitted --\u003e(7e0eb)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender ref links and footnotes in footnotes.  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/bd90e44\"\u003e\u003c!-- raw HTML omitted --\u003e(bd90e)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRender ref links in TOC.  -  by \u003ca href=\"https://github.com/lemon24\"\u003e\u003ccode\u003e@​lemon24\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/a0a0148\"\u003e\u003c!-- raw HTML omitted --\u003e(a0a01)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate typing for mypy upgrades  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/8d49cba\"\u003e\u003c!-- raw HTML omitted --\u003e(8d49c)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRender correct html for footnotes  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/9b62204\"\u003e\u003c!-- raw HTML omitted --\u003e(9b622)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/lepture/mistune/compare/v3.1.4...v3.2.0\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\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/lepture/mistune/blob/main/docs/changes.rst\"\u003emistune's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.2.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 3, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEscape link in \u003ccode\u003erender_toc_ul\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eEscape text in math plugin.\u003c/li\u003e\n\u003cli\u003eFix regex for math plugin.\u003c/li\u003e\n\u003cli\u003eEscape heading's ID attribute.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLINK_TITLE_RE\u003c/code\u003e to prevent DoS.\u003c/li\u003e\n\u003cli\u003eEscape class attribute for admonition directive.\u003c/li\u003e\n\u003cli\u003eRemove double-encoding of image alt text.\u003c/li\u003e\n\u003cli\u003eEscape class attribute for image directive.\u003c/li\u003e\n\u003cli\u003eFix width/height attribute for image directive.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.2.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on Dec 23, 2025\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAnnounce supports for python 3.14\u003c/li\u003e\n\u003cli\u003eFix footnotes plugins for code blocks, ref links, blockquote and etc.\u003c/li\u003e\n\u003cli\u003eFix ref links in TOC.\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/lepture/mistune/commit/067f90861088a496942f5eb43236135352b85d39\"\u003e\u003ccode\u003e067f908\u003c/code\u003e\u003c/a\u003e chore: release 3.2.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/bf5503067a7d8c3b065fb143f67a3a08eca77bb6\"\u003e\u003ccode\u003ebf55030\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/lepture/mistune/issues/438\"\u003e#438\u003c/a\u003e from saschabuehrle/fix/issue-370\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/8d0cb7539a9ac82e633b98476b9922632eb8b948\"\u003e\u003ccode\u003e8d0cb75\u003c/code\u003e\u003c/a\u003e fix: use strict regex for image's height and width\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/5fa092e3053b86f16e4c49b9d3ba0b7ab63f09ab\"\u003e\u003ccode\u003e5fa092e\u003c/code\u003e\u003c/a\u003e fix: escape xml for math plugin\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/71ec9477ebfcf8dab0068804baf2c77461d77fbb\"\u003e\u003ccode\u003e71ec947\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/lepture/mistune/issues/440\"\u003e#440\u003c/a\u003e from lawrence3699/fix/image-alt-double-encoding\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/0d6f3d850283d51e9c60e5a1b3c9343a18df3722\"\u003e\u003ccode\u003e0d6f3d8\u003c/code\u003e\u003c/a\u003e fix: remove double-encoding of image alt text\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/2855622d7fe235c6c805716edff943b5945d1eea\"\u003e\u003ccode\u003e2855622\u003c/code\u003e\u003c/a\u003e fix: escape id of headings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/04880a004cb28318e5ebd7ee9e63c79fc9f9ed04\"\u003e\u003ccode\u003e04880a0\u003c/code\u003e\u003c/a\u003e fix: escape id of toc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/7bd57096715385062505b3f78972be9fa823d6d4\"\u003e\u003ccode\u003e7bd5709\u003c/code\u003e\u003c/a\u003e fix: handle escaped dollar signs in inline math (fixes \u003ca href=\"https://redirect.github.com/lepture/mistune/issues/370\"\u003e#370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/85eb54ff17da26327399bf188f9ff9b8fd515278\"\u003e\u003ccode\u003e85eb54f\u003c/code\u003e\u003c/a\u003e fix: update link reference\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/lepture/mistune/compare/v3.1.4...v3.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nbconvert` from 7.16.6 to 7.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jupyter/nbconvert/releases\"\u003enbconvert's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.17.1\u003c/h2\u003e\n\u003ch2\u003e7.17.1\u003c/h2\u003e\n\u003cp\u003eThis is a security release, fixing two CVEs:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/security/advisories/GHSA-4c99-qj7h-p3vg\"\u003eCVE-2026-39377\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/security/advisories/GHSA-7jqv-fw35-gmx9\"\u003eCVE-2026-39378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(full advisories will be published seven days after release, on 2026-04-14).\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.17.0...b3b6ec01f872e9af8fd1769eb9cf1889c720ecf3\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow configureable WebPDF JavaScript processing timeout \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2250\"\u003e#2250\u003c/a\u003e (\u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\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 \u003ccode\u003ePermissionError\u003c/code\u003e when checking template paths on shared filesystems \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2252\"\u003e#2252\u003c/a\u003e (\u003ca href=\"https://github.com/ctcjab\"\u003e\u003ccode\u003e@​ctcjab\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTweak webpdf template logic to fix duplicate extension problem \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2249\"\u003e#2249\u003c/a\u003e (\u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance and upkeep improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003especify python version for pre \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2276\"\u003e#2276\u003c/a\u003e (\u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors to this release\u003c/h3\u003e\n\u003cp\u003eThe following people contributed discussions, new ideas, code and documentation contributions, and review.\nSee \u003ca href=\"https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports\"\u003eour definition of contributors\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/graphs/contributors?from=2026-01-29\u0026amp;to=2026-04-08\u0026amp;type=c\"\u003eGitHub contributors page for this release\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/akhmerov\"\u003e\u003ccode\u003e@​akhmerov\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Aakhmerov+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/bollwyvl\"\u003e\u003ccode\u003e@​bollwyvl\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Abollwyvl+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3ACarreau+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/ctcjab\"\u003e\u003ccode\u003e@​ctcjab\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Actcjab+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Adavidbrochart+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/Ken-B\"\u003e\u003ccode\u003e@​Ken-B\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3AKen-B+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Akrassowski+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/mgeier\"\u003e\u003ccode\u003e@​mgeier\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Amgeier+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Aminrk+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/mpacer\"\u003e\u003ccode\u003e@​mpacer\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Ampacer+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/MSeal\"\u003e\u003ccode\u003e@​MSeal\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3AMSeal+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/SylvainCorlay\"\u003e\u003ccode\u003e@​SylvainCorlay\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3ASylvainCorlay+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/takluyver\"\u003e\u003ccode\u003e@​takluyver\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Atakluyver+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Atimkpaine+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003ev7.17.0\u003c/h2\u003e\n\u003ch2\u003e7.17.0\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.16.6...c9ac1d1040459ed1ff9eb34e9918ce5a87cf9d71\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for arbitrary browser arguments \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2227\"\u003e#2227\u003c/a\u003e (\u003ca href=\"https://github.com/shreve\"\u003e\u003ccode\u003e@​shreve\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\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 QtPNGExporter returning empty bytes on macOS \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2264\"\u003e#2264\u003c/a\u003e (\u003ca href=\"https://github.com/h3pdesign\"\u003e\u003ccode\u003e@​h3pdesign\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/QuLogic\"\u003e\u003ccode\u003e@​QuLogic\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/jupyter/nbconvert/blob/main/CHANGELOG.md\"\u003enbconvert's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.17.1\u003c/h2\u003e\n\u003cp\u003eThis is a security release, fixing two CVEs:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/security/advisories/GHSA-4c99-qj7h-p3vg\"\u003eCVE-2026-39377\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/security/advisories/GHSA-7jqv-fw35-gmx9\"\u003eCVE-2026-39378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(full advisories will be published seven days after release, on 2026-04-14).\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.17.0...b3b6ec01f872e9af8fd1769eb9cf1889c720ecf3\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow configureable WebPDF JavaScript processing timeout \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2250\"\u003e#2250\u003c/a\u003e (\u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\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 \u003ccode\u003ePermissionError\u003c/code\u003e when checking template paths on shared filesystems \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2252\"\u003e#2252\u003c/a\u003e (\u003ca href=\"https://github.com/ctcjab\"\u003e\u003ccode\u003e@​ctcjab\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTweak webpdf template logic to fix duplicate extension problem \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2249\"\u003e#2249\u003c/a\u003e (\u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance and upkeep improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003especify python version for pre \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2276\"\u003e#2276\u003c/a\u003e (\u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors to this release\u003c/h3\u003e\n\u003cp\u003eThe following people contributed discussions, new ideas, code and documentation contributions, and review.\nSee \u003ca href=\"https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports\"\u003eour definition of contributors\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/graphs/contributors?from=2026-01-29\u0026amp;to=2026-04-08\u0026amp;type=c\"\u003eGitHub contributors page for this release\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/akhmerov\"\u003e\u003ccode\u003e@​akhmerov\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Aakhmerov+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/bollwyvl\"\u003e\u003ccode\u003e@​bollwyvl\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Abollwyvl+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3ACarreau+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/ctcjab\"\u003e\u003ccode\u003e@​ctcjab\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Actcjab+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Adavidbrochart+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/Ken-B\"\u003e\u003ccode\u003e@​Ken-B\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3AKen-B+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Akrassowski+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/mgeier\"\u003e\u003ccode\u003e@​mgeier\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Amgeier+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Aminrk+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/mpacer\"\u003e\u003ccode\u003e@​mpacer\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Ampacer+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/MSeal\"\u003e\u003ccode\u003e@​MSeal\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3AMSeal+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/SylvainCorlay\"\u003e\u003ccode\u003e@​SylvainCorlay\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3ASylvainCorlay+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/takluyver\"\u003e\u003ccode\u003e@​takluyver\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Atakluyver+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Atimkpaine+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003e7.17.0\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.16.6...c9ac1d1040459ed1ff9eb34e9918ce5a87cf9d71\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for arbitrary browser arguments \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2227\"\u003e#2227\u003c/a\u003e (\u003ca href=\"https://github.com/shreve\"\u003e\u003ccode\u003e@​shreve\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\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 QtPNGExporter returning empty bytes on macOS \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2264\"\u003e#2264\u003c/a\u003e (\u003ca href=\"https://github.com/h3pdesign\"\u003e\u003ccode\u003e@​h3pdesign\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/QuLogic\"\u003e\u003ccode\u003e@​QuLogic\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix CVE-2025-53000: Secure Inkscape Windows path (registry first + block CWD) \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2261\"\u003e#2261\u003c/a\u003e (\u003ca href=\"https://github.com/h3pdesign\"\u003e\u003ccode\u003e@​h3pdesign\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/mberlanda\"\u003e\u003ccode\u003e@​mberlanda\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/salmankadaya\"\u003e\u003ccode\u003e@​salmankadaya\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/th3gowtham\"\u003e\u003ccode\u003e@​th3gowtham\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix get_export_names and get_exporter default args \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2228\"\u003e#2228\u003c/a\u003e (\u003ca href=\"https://github.com/shreve\"\u003e\u003ccode\u003e@​shreve\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePyPA-Compliant Summary \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2226\"\u003e#2226\u003c/a\u003e (\u003ca href=\"https://github.com/hackowitz-af\"\u003e\u003ccode\u003e@​hackowitz-af\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\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/jupyter/nbconvert/commit/78ed30837a607deab7cf0a12dca072bf3f63417a\"\u003e\u003ccode\u003e78ed308\u003c/code\u003e\u003c/a\u003e Publish 7.17.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/f090a64606fde4c7f87cbf478f51b4aa46a425ec\"\u003e\u003ccode\u003ef090a64\u003c/code\u003e\u003c/a\u003e ruff format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/b3b6ec01f872e9af8fd1769eb9cf1889c720ecf3\"\u003e\u003ccode\u003eb3b6ec0\u003c/code\u003e\u003c/a\u003e chore: update pre-commit hooks (\u003ca href=\"https://redirect.github.com/jupyter/nbconvert/issues/2277\"\u003e#2277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/be4841f7da51c499b1937e41e6e71926dbe0daa3\"\u003e\u003ccode\u003ebe4841f\u003c/code\u003e\u003c/a\u003e ignore silly security lint in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/26d57b295870f5572d9bd0535acee4a120339c10\"\u003e\u003ccode\u003e26d57b2\u003c/code\u003e\u003c/a\u003e fix type annotation on Lexer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/0e6b8ccabf2aca6c18fac8c574f22b7155f441fb\"\u003e\u003ccode\u003e0e6b8cc\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/ba5e5cdd737704388251fa55fa9e58f5752fa39d\"\u003e\u003ccode\u003eba5e5cd\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/1db0c88d865146ce02b6405a8d96753d3d0cd0c2\"\u003e\u003ccode\u003e1db0c88\u003c/code\u003e\u003c/a\u003e Specify python version for pre (\u003ca href=\"https://redirect.github.com/jupyter/nbconvert/issues/2276\"\u003e#2276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/7473fc3037a6317bff54380e3a7162d73bf089b3\"\u003e\u003ccode\u003e7473fc3\u003c/code\u003e\u003c/a\u003e chore: update pre-commit hooks (\u003ca href=\"https://redirect.github.com/jupyter/nbconvert/issues/2242\"\u003e#2242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/4322f7f290694929f414cefadc942111afad3762\"\u003e\u003ccode\u003e4322f7f\u003c/code\u003e\u003c/a\u003e Bump the actions group across 1 directory with 2 updates (\u003ca href=\"https://redirect.github.com/jupyter/nbconvert/issues/2273\"\u003e#2273\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.16.6...v7.17.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nltk` from 3.9.2 to 3.9.4\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nltk/nltk/blob/develop/ChangeLog\"\u003enltk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 3.9.4 2026-03-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Python 3.14\u003c/li\u003e\n\u003cli\u003eFix bug in Levenshtein distance when substitution_cost \u0026gt; 2\u003c/li\u003e\n\u003cli\u003eFix bug in Treebank detokeniser re quote ordering\u003c/li\u003e\n\u003cli\u003eFix bug in Jaro similarity for empty strings\u003c/li\u003e\n\u003cli\u003eSeveral security enhancements\u003c/li\u003e\n\u003cli\u003eFix GHSA-rf74-v2fm-23pw: unbounded recursion in JSONTaggedDecoder\u003c/li\u003e\n\u003cli\u003eImplement TextTiling vocabulary introduction method (Hearst 1997)\u003c/li\u003e\n\u003cli\u003eFix ALINE feature matrix errors and add comprehensive tests\u003c/li\u003e\n\u003cli\u003eSupport multiple VerbNet versions, fix longid/shortid regex for VerbNet ids\u003c/li\u003e\n\u003cli\u003eLet downloader fallback to md5 when sha256 is unavailable\u003c/li\u003e\n\u003cli\u003eSeveral other minor bugfixes and code cleanups\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.9.4:\nMin-Yen Kan, Eric Kafe, Emily Voss, bowiechen, Hrudhai01,\njancallewaert, Mr-Neutr0n, pollak.peter89, ylwango613,\u003c/p\u003e\n\u003cp\u003eVersion 3.9.3 2026-02-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix CVE-2025-14009: secure ZIP extraction in nltk.downloader (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3468\"\u003e#3468\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock path traversal/arbitrary reads in nltk.data for protocol-less refs (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3467\"\u003e#3467\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock path traversal/abs paths in corpus readers and FS pointers (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3479\"\u003e#3479\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3480\"\u003e#3480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate external StanfordSegmenter JARs using SHA256 (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3477\"\u003e#3477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd optional sandbox enforcement for filestring() (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3485\"\u003e#3485\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMaintenance: downloader/zipped models, CI/tooling updates\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.9.3:\nChris Clauss, Eric Kafe, HyperPS, purificant, Shivansh-Game, Christopher Smith\u003c/p\u003e\n\u003cp\u003eVersion 3.9.2 2025-10-01\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate download checksums to use SHA256 in built index\u003c/li\u003e\n\u003cli\u003eFix percentage escape in new-style string formatting\u003c/li\u003e\n\u003cli\u003ereplace shortened URLs using goo.gl\u003c/li\u003e\n\u003cli\u003eMake Wordnet interoperable with various taggers and tagged corpora\u003c/li\u003e\n\u003cli\u003eFix saving PerceptronTagger\u003c/li\u003e\n\u003cli\u003eDocument how to reproduce old Wordnet studies\u003c/li\u003e\n\u003cli\u003eproperly initialize Portuguese corpus reader\u003c/li\u003e\n\u003cli\u003esupport for mixed rules conversion into Chomsky Normal Form\u003c/li\u003e\n\u003cli\u003eonly import tkinter if a GUI is needed\u003c/li\u003e\n\u003cli\u003eissue \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/2112\"\u003e#2112\u003c/a\u003e with Corenlp\u003c/li\u003e\n\u003cli\u003enew environment variable NLTK_DOWNLOADER_FORCE_INTERACTIVE_SHELL\u003c/li\u003e\n\u003cli\u003eLesk defaults to most frequent sense in case of ties\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.9.2:\nJose Cols, Peter de Blanc, GeneralPoxter, Eric Kafe, William LaCroix, Jason Liu,\nSamer Masterson, Mike014, purificant, Andrew Ernest Ritz, samertm, Ikram Ul Haq,\nChristopher Smith, Ryan Mannion\u003c/p\u003e\n\u003cp\u003eVersion 3.9.1 2024-08-19\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/nltk/nltk/commit/ad9c96ba00a16923ffe917eacf63f1707bfa2d08\"\u003e\u003ccode\u003ead9c96b\u003c/code\u003e\u003c/a\u003e Update copyright year\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/7edcddfda566627b897397397cc4d10ae91cb86d\"\u003e\u003ccode\u003e7edcddf\u003c/code\u003e\u003c/a\u003e Updates for 3.9.4 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/67a2736f89b286b028db08bd247134f17a11fc6b\"\u003e\u003ccode\u003e67a2736\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3180\"\u003e#3180\u003c/a\u003e from yzhaoinuw/bug-on-edit_distance_align\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/2b17ac5358a1c8d4b97455766efde0b786e6cdb2\"\u003e\u003ccode\u003e2b17ac5\u003c/code\u003e\u003c/a\u003e Fix edit_distance_align backtrace for high substitution costs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/4b72976a6ff3d180ed4012f11843e611a8f89516\"\u003e\u003ccode\u003e4b72976\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3018\"\u003e#3018\u003c/a\u003e from JuanIMartinezB/bug/shortid-longid\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/8a5619f53a281149e5342b1a00fe05fe2fc6517f\"\u003e\u003ccode\u003e8a5619f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3222\"\u003e#3222\u003c/a\u003e from Syzygy2048/feature/texttiling-vocabulary-introd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/c6574d755e02b6163d9cd1d0b407076940e08864\"\u003e\u003ccode\u003ec6574d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3289\"\u003e#3289\u003c/a\u003e from ihitamandal/codeflash/optimize-windowdiff-2024-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/98ff5d9eaa1a81511873b9aef857944519c28dc4\"\u003e\u003ccode\u003e98ff5d9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3435\"\u003e#3435\u003c/a\u003e from Hrudhai01/fix-3260-detokenize-quotes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/aec4fce1b84ad725b8975f7365b23a4f626572a9\"\u003e\u003ccode\u003eaec4fce\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3522\"\u003e#3522\u003c/a\u003e from ekaf/pathsec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/eec4ee3591cb9cb8b8c2989f08012608c841d532\"\u003e\u003ccode\u003eeec4ee3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3526\"\u003e#3526\u003c/a\u003e from nltk/update-contributing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nltk/nltk/compare/3.9.2...3.9.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.4.2 to 6.10.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.10.2, 2026-04-15\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDo not rely on possibly invalid /Size for incremental cloning (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3735\"\u003e#3735\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\u003eIntroduce limits for FlateDecode parameters and image decoding (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3734\"\u003e#3734\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.10.1...6.10.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.10.1, 2026-04-14\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit the allowed size of xref and object streams (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3733\"\u003e#3733\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\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eConsider strict mode setting for decryption errors (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3731\"\u003e#3731\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\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse new parameter names for compress_identical_objects 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.10.0...6.10.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.10.0, 2026-04-10\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow custom XML entity declarations for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3724\"\u003e#3724\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6...\n\n_Description has been truncated_","html_url":"https://github.com/tabrezahmed51/MiroFish_0118/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tabrezahmed51%2FMiroFish_0118/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}],"issue_packages":[{"old_version":"3.29.4","new_version":"3.32.0","update_type":"minor","path":null,"pr_created_at":"2026-07-24T08:38:17.000Z","version_change":"3.29.4 → 3.32.0","issue":{"uuid":"4966765057","node_id":"PR_kwDOIiR3Sc71w7jq","number":256,"state":"closed","title":"chore(deps): Bump the pip-version-updates group across 1 directory with 38 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-29T09:17:07.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-24T08:38:17.000Z","updated_at":"2026-07-29T09:17:08.000Z","time_to_close":434330,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"pip-version-updates","update_count":38,"packages":[{"name":"annotated-types","old_version":"0.7.0","new_version":"0.8.0","repository_url":"https://github.com/annotated-types/annotated-types"},{"name":"anthropic","old_version":"0.111.0","new_version":"0.119.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"anyio","old_version":"4.14.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"boto3","old_version":"1.43.33","new_version":"1.43.55","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.33","new_version":"1.43.55","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.6.17","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"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":"filelock","old_version":"3.29.4","new_version":"3.32.0","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"hf-xet","old_version":"1.5.1","new_version":"1.5.2","repository_url":"https://github.com/huggingface/xet-core"},{"name":"html5tagger","old_version":"1.3.0","new_version":"2.0.0","repository_url":"https://github.com/sanic-org/html5tagger"},{"name":"huggingface-hub","old_version":"1.20.1","new_version":"1.24.0","repository_url":"https://github.com/huggingface/huggingface_hub"},{"name":"humanize","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python-humanize/humanize"},{"name":"jiter","old_version":"0.15.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"lazy-model","old_version":"0.2.0","new_version":"0.4.0"},{"name":"narwhals","old_version":"2.22.1","new_version":"2.24.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"numpy","old_version":"2.4.6","new_version":"2.5.1","repository_url":"https://github.com/numpy/numpy"},{"name":"openai","old_version":"2.43.0","new_version":"2.48.0","repository_url":"https://github.com/openai/openai-python"},{"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.10.0","new_version":"4.11.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"python-engineio","old_version":"4.13.2","new_version":"4.13.3","repository_url":"https://github.com/miguelgrinberg/python-engineio"},{"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.19.0","new_version":"0.19.2","repository_url":"https://github.com/boto/s3transfer"},{"name":"scipy","old_version":"1.17.1","new_version":"1.18.0","repository_url":"https://github.com/scipy/scipy"},{"name":"setuptools","old_version":"82.0.1","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"tracerite","old_version":"2.3.1","new_version":"2.6.3","repository_url":"https://github.com/sanic-org/tracerite"},{"name":"typer","old_version":"0.25.1","new_version":"0.27.0","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":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"tzlocal","old_version":"5.4.3","new_version":"5.4.4","repository_url":"https://github.com/regebro/tzlocal"},{"name":"wcwidth","old_version":"0.8.1","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"pytest","old_version":"9.1.0","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"coverage","old_version":"7.14.1","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"astroid","old_version":"4.0.4","new_version":"4.1.2","repository_url":"https://github.com/pylint-dev/astroid"},{"name":"tomlkit","old_version":"0.15.0","new_version":"0.15.1","repository_url":"https://github.com/python-poetry/tomlkit"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-version-updates group with 38 updates in the /server directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [annotated-types](https://github.com/annotated-types/annotated-types) | `0.7.0` | `0.8.0` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.111.0` | `0.119.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.0` | `4.14.2` |\n| [boto3](https://github.com/boto/boto3) | `1.43.33` | `1.43.55` |\n| [botocore](https://github.com/boto/botocore) | `1.43.33` | `1.43.55` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.6.17` | `2026.7.22` |\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| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.4` | `3.32.0` |\n| [hf-xet](https://github.com/huggingface/xet-core) | `1.5.1` | `1.5.2` |\n| [html5tagger](https://github.com/sanic-org/html5tagger) | `1.3.0` | `2.0.0` |\n| [huggingface-hub](https://github.com/huggingface/huggingface_hub) | `1.20.1` | `1.24.0` |\n| [humanize](https://github.com/python-humanize/humanize) | `4.15.0` | `4.16.0` |\n| [jiter](https://github.com/pydantic/jiter) | `0.15.0` | `0.16.0` |\n| lazy-model | `0.2.0` | `0.4.0` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.22.1` | `2.24.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.6` | `2.5.1` |\n| [openai](https://github.com/openai/openai-python) | `2.43.0` | `2.48.0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.11.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [python-engineio](https://github.com/miguelgrinberg/python-engineio) | `4.13.2` | `4.13.3` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.0.1` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.19.0` | `0.19.2` |\n| [scipy](https://github.com/scipy/scipy) | `1.17.1` | `1.18.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `83.0.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.69.0` |\n| [tracerite](https://github.com/sanic-org/tracerite) | `2.3.1` | `2.6.3` |\n| [typer](https://github.com/fastapi/typer) | `0.25.1` | `0.27.0` |\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| [tzlocal](https://github.com/regebro/tzlocal) | `5.4.3` | `5.4.4` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.8.1` | `0.8.2` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.1.0` | `9.1.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.1` | `7.15.2` |\n| [astroid](https://github.com/pylint-dev/astroid) | `4.0.4` | `4.1.2` |\n| [tomlkit](https://github.com/python-poetry/tomlkit) | `0.15.0` | `0.15.1` |\n\n\nUpdates `annotated-types` from 0.7.0 to 0.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/annotated-types/annotated-types/releases\"\u003eannotated-types's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.8.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRename DocInfo to Doc by \u003ca href=\"https://github.com/zen-xu\"\u003e\u003ccode\u003e@​zen-xu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/80\"\u003eannotated-types/annotated-types#80\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.13 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/83\"\u003eannotated-types/annotated-types#83\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix docstring of \u003ccode\u003eTimezone\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/annotated-types/annotated-types/pull/84\"\u003eannotated-types/annotated-types#84\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate license-files to be PEP-639 compliant (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/85\"\u003e#85\u003c/a\u003e) by \u003ca href=\"https://github.com/shoeffner\"\u003e\u003ccode\u003e@​shoeffner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/86\"\u003eannotated-types/annotated-types#86\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typo in README.md by \u003ca href=\"https://github.com/camiloaz\"\u003e\u003ccode\u003e@​camiloaz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/87\"\u003eannotated-types/annotated-types#87\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eadd CI for PyPy3.11 and fix test (issue 71) by \u003ca href=\"https://github.com/mattip\"\u003e\u003ccode\u003e@​mattip\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/88\"\u003eannotated-types/annotated-types#88\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix string predicate names in doc by \u003ca href=\"https://github.com/leogermond\"\u003e\u003ccode\u003e@​leogermond\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/90\"\u003eannotated-types/annotated-types#90\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd SPDX license expression by \u003ca href=\"https://github.com/wichert\"\u003e\u003ccode\u003e@​wichert\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/92\"\u003eannotated-types/annotated-types#92\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded Python 3.14 to the test matrix by \u003ca href=\"https://github.com/imtoopunkforyou\"\u003e\u003ccode\u003e@​imtoopunkforyou\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/96\"\u003eannotated-types/annotated-types#96\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.14 and drop EOL 3.8-3.9 by \u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/97\"\u003eannotated-types/annotated-types#97\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in \u003ccode\u003eLen\u003c/code\u003e docstring by \u003ca href=\"https://github.com/Dutcho\"\u003e\u003ccode\u003e@​Dutcho\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/100\"\u003eannotated-types/annotated-types#100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare for 0.8.0 release by \u003ca href=\"https://github.com/adriangb\"\u003e\u003ccode\u003e@​adriangb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/103\"\u003eannotated-types/annotated-types#103\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/zen-xu\"\u003e\u003ccode\u003e@​zen-xu\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/80\"\u003eannotated-types/annotated-types#80\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/83\"\u003eannotated-types/annotated-types#83\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/shoeffner\"\u003e\u003ccode\u003e@​shoeffner\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/86\"\u003eannotated-types/annotated-types#86\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/camiloaz\"\u003e\u003ccode\u003e@​camiloaz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/87\"\u003eannotated-types/annotated-types#87\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mattip\"\u003e\u003ccode\u003e@​mattip\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/88\"\u003eannotated-types/annotated-types#88\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/leogermond\"\u003e\u003ccode\u003e@​leogermond\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/90\"\u003eannotated-types/annotated-types#90\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/wichert\"\u003e\u003ccode\u003e@​wichert\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/92\"\u003eannotated-types/annotated-types#92\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/imtoopunkforyou\"\u003e\u003ccode\u003e@​imtoopunkforyou\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/96\"\u003eannotated-types/annotated-types#96\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Dutcho\"\u003e\u003ccode\u003e@​Dutcho\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/pull/100\"\u003eannotated-types/annotated-types#100\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\"\u003ehttps://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.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/annotated-types/annotated-types/commit/9eb96680138269811a39d838d720abc3dce33954\"\u003e\u003ccode\u003e9eb9668\u003c/code\u003e\u003c/a\u003e Prepare for 0.8.0 release (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/103\"\u003e#103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/10b77644f88b385357653730a1ab23748ca3ae2e\"\u003e\u003ccode\u003e10b7764\u003c/code\u003e\u003c/a\u003e Fix typo in \u003ccode\u003eLen\u003c/code\u003e docstring (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/100\"\u003e#100\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/955f7576d616feb6e9407c74498517787c38afd4\"\u003e\u003ccode\u003e955f757\u003c/code\u003e\u003c/a\u003e Add support for Python 3.14 and drop EOL 3.8-3.9 (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/97\"\u003e#97\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/bd280fea7983550d266f993d868b8dd7ff822bf1\"\u003e\u003ccode\u003ebd280fe\u003c/code\u003e\u003c/a\u003e Added Python 3.14 to the test matrix (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/96\"\u003e#96\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/a471bb757663452459893e6f593118ec21eb1b9e\"\u003e\u003ccode\u003ea471bb7\u003c/code\u003e\u003c/a\u003e Add SPDX license expression (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/92\"\u003e#92\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/eab91d9a8c0d3f73661fc4b0794a1fe76c94fa84\"\u003e\u003ccode\u003eeab91d9\u003c/code\u003e\u003c/a\u003e Fix string predicate names in doc (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/90\"\u003e#90\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/03ad9c3c7b4d4dfe9e33c09075a3a2766c0820e1\"\u003e\u003ccode\u003e03ad9c3\u003c/code\u003e\u003c/a\u003e add CI for PyPy3.11 and fix test (issue 71) (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/88\"\u003e#88\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/5ae60437f0ab493cedd27311bc6ce6d2188e8d8b\"\u003e\u003ccode\u003e5ae6043\u003c/code\u003e\u003c/a\u003e fix: typo in README.md (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/87\"\u003e#87\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/b60ad7bff90019c7de3547df1c8e3586eb328423\"\u003e\u003ccode\u003eb60ad7b\u003c/code\u003e\u003c/a\u003e Update license-files to be PEP-639 compliant (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/85\"\u003e#85\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/86\"\u003e#86\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/annotated-types/annotated-types/commit/3fbeb6d129760ae48d7a0372fb9301764acc95ae\"\u003e\u003ccode\u003e3fbeb6d\u003c/code\u003e\u003c/a\u003e Fix docstring of \u003ccode\u003eTimezone\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/annotated-types/annotated-types/issues/84\"\u003e#84\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/annotated-types/annotated-types/compare/v0.7.0...v0.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 0.111.0 to 0.119.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.119.0\u003c/h2\u003e\n\u003ch2\u003e0.119.0 (2026-07-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.118.0...v0.119.0\"\u003ev0.118.0...v0.119.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add new stop reason 'model_context_window_exceeded' (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d983cdecdea27fb8ae36fd293930b978c9bebf4f\"\u003ed983cde\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e handle binary files in agent toolset read/edit (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/283\"\u003e#283\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/417b76b9adcb69ee9effa2e9af1536dd08e6764e\"\u003e417b76b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.118.0\u003c/h2\u003e\n\u003ch2\u003e0.118.0 (2026-07-22)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.117.1...v0.118.0\"\u003ev0.117.1...v0.118.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for Managed Agents model effort, initial session events, and threads delta streaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/712bc6f5e07ca7607e13f24fba4eea57c2e73478\"\u003e712bc6f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.117.1\u003c/h2\u003e\n\u003ch2\u003e0.117.1 (2026-07-21)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.117.0...v0.117.1\"\u003ev0.117.0...v0.117.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eaws:\u003c/strong\u003e handle credentials correctly when using AnthropicAWS.copy() (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/85d3881b2e178dd30b30f9ac4c462f20ea88693d\"\u003e85d3881\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for new refusal category (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d1dea0b51164c859de1e05a78468f5be2b6a67de\"\u003ed1dea0b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e docs updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b14f94c231f9adc6bb2ad96eddfc27cc1a4cfea7\"\u003eb14f94c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e bump http-snapshot to 0.1.9 (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/275\"\u003e#275\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/434b65772633f1c0d1899de64d40a67b7cb943fe\"\u003e434b657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e pin httpx_aiohttp major version (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/271\"\u003e#271\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/924487f7c8b3afd69ec382af78326ba224779141\"\u003e924487f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c48db8b6cdd800a98bf57088f530de8fe4dc82e8\"\u003ec48db8b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/755c06cc06161ccdf9b28b77d5e6de58adb462ce\"\u003e755c06c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e codegen related update (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4fbecf6a2b002c8807da2336a75ddef7864f47c\"\u003ea4fbecf\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.117.0\u003c/h2\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003c!-- 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/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.119.0 (2026-07-23)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.118.0...v0.119.0\"\u003ev0.118.0...v0.119.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add new stop reason 'model_context_window_exceeded' (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d983cdecdea27fb8ae36fd293930b978c9bebf4f\"\u003ed983cde\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003etools:\u003c/strong\u003e handle binary files in agent toolset read/edit (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/283\"\u003e#283\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/417b76b9adcb69ee9effa2e9af1536dd08e6764e\"\u003e417b76b\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.118.0 (2026-07-22)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.117.1...v0.118.0\"\u003ev0.117.1...v0.118.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for Managed Agents model effort, initial session events, and threads delta streaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/712bc6f5e07ca7607e13f24fba4eea57c2e73478\"\u003e712bc6f\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.117.1 (2026-07-21)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.117.0...v0.117.1\"\u003ev0.117.0...v0.117.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eaws:\u003c/strong\u003e handle credentials correctly when using AnthropicAWS.copy() (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/85d3881b2e178dd30b30f9ac4c462f20ea88693d\"\u003e85d3881\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for new refusal category (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d1dea0b51164c859de1e05a78468f5be2b6a67de\"\u003ed1dea0b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e docs updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b14f94c231f9adc6bb2ad96eddfc27cc1a4cfea7\"\u003eb14f94c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e bump http-snapshot to 0.1.9 (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/275\"\u003e#275\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/434b65772633f1c0d1899de64d40a67b7cb943fe\"\u003e434b657\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edeps:\u003c/strong\u003e pin httpx_aiohttp major version (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/271\"\u003e#271\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/924487f7c8b3afd69ec382af78326ba224779141\"\u003e924487f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c48db8b6cdd800a98bf57088f530de8fe4dc82e8\"\u003ec48db8b\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/755c06cc06161ccdf9b28b77d5e6de58adb462ce\"\u003e755c06c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003einternal:\u003c/strong\u003e codegen related update (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a4fbecf6a2b002c8807da2336a75ddef7864f47c\"\u003ea4fbecf\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- 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/anthropics/anthropic-sdk-python/commit/eb178ecf7b0951226cac47986c520e3dbc658edb\"\u003e\u003ccode\u003eeb178ec\u003c/code\u003e\u003c/a\u003e release: 0.119.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/691471837f19dd4ce50fd96eaf91993a0eb4d72a\"\u003e\u003ccode\u003e6914718\u003c/code\u003e\u003c/a\u003e feat(api): add new stop reason 'model_context_window_exceeded'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d2bad4fc771493d245a7fb182ef6860907ab728f\"\u003e\u003ccode\u003ed2bad4f\u003c/code\u003e\u003c/a\u003e fix(tools): handle binary files in agent toolset read/edit (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/283\"\u003e#283\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b52770843a4c703b3b4e5df7ec36800b62b2fc0b\"\u003e\u003ccode\u003eb527708\u003c/code\u003e\u003c/a\u003e release: 0.118.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f2412fd969cc2800fe9a14535e62899bc1d03494\"\u003e\u003ccode\u003ef2412fd\u003c/code\u003e\u003c/a\u003e feat(api): add support for Managed Agents model effort, initial session event...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d7c0ea24729825da8f817c0da2ebb20ade7a43cc\"\u003e\u003ccode\u003ed7c0ea2\u003c/code\u003e\u003c/a\u003e release: 0.117.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5ebdcb03966baf6a8948b1d74eca0254965414c5\"\u003e\u003ccode\u003e5ebdcb0\u003c/code\u003e\u003c/a\u003e chore(api): add support for new refusal category\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b50f8b1e144d10adf443fab4424f92037897add2\"\u003e\u003ccode\u003eb50f8b1\u003c/code\u003e\u003c/a\u003e chore(deps): bump http-snapshot to 0.1.9 (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/275\"\u003e#275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/dc61d3b11dbb1c0676cc485e7fb91a4b0db8e41e\"\u003e\u003ccode\u003edc61d3b\u003c/code\u003e\u003c/a\u003e chore(internal): codegen related update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/42e2d8613304e0b500c8552b1ed4d9c336a45b7a\"\u003e\u003ccode\u003e42e2d86\u003c/code\u003e\u003c/a\u003e chore(deps): pin httpx_aiohttp major version (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/271\"\u003e#271\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.111.0...v0.119.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.0 to 4.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged \u003ccode\u003eByteReceiveStream.receive()\u003c/code\u003e implementations to raise a \u003ccode\u003eValueError\u003c/code\u003e when \u003ccode\u003emax_bytes\u003c/code\u003e is not a positive integer (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1191\"\u003e#1191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting \u003ccode\u003efloat(\u0026quot;inf\u0026quot;)\u003c/code\u003e when the limiter was instantiated outside of an event loop. The adapter setter checked for infinity by identity (\u003ccode\u003evalue is math.inf\u003c/code\u003e), so only the exact \u003ccode\u003emath.inf\u003c/code\u003e singleton was accepted, while every backend setter (using \u003ccode\u003emath.isinf()\u003c/code\u003e) accepts any positive infinity (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1189\"\u003e#1189\u003c/a\u003e; PR by \u003ca href=\"https://github.com/greymoth-jp\"\u003e\u003ccode\u003e@​greymoth-jp\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eto_process.run_sync()\u003c/code\u003e deadlocking when the worker function writes enough data to \u003ccode\u003esys.stderr\u003c/code\u003e to fill the (undrained) pipe buffer. The worker process now redirects \u003ccode\u003esys.stderr\u003c/code\u003e to \u003ccode\u003eos.devnull\u003c/code\u003e as well, matching the documented behavior\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eTLSStream.wrap()\u003c/code\u003e matching an internationalized (unicode) host name against the peer certificate using IDNA 2003 (via the standard library) instead of IDNA 2008, which could cause the host name to be matched against the wrong certificate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.open_process()\u003c/code\u003e (and \u003ccode\u003erun_process()\u003c/code\u003e) ignoring the \u003ccode\u003eextra_groups\u003c/code\u003e argument, as it mistakenly passed the value of the \u003ccode\u003egroup\u003c/code\u003e argument instead (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1209\"\u003e#1209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.acquire_nowait()\u003c/code\u003e and \u003ccode\u003eCapacityLimiter.acquire_nowait_on_behalf_of()\u003c/code\u003e raising \u003ccode\u003etrio.WouldBlock\u003c/code\u003e instead of \u003ccode\u003eanyio.WouldBlock\u003c/code\u003e on the \u003ccode\u003etrio\u003c/code\u003e backend when there are no tokens available (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens (\u003ccode\u003eborrowed_tokens\u003c/code\u003e exceeding \u003ccode\u003etotal_tokens\u003c/code\u003e and \u003ccode\u003eavailable_tokens\u003c/code\u003e going negative) when a non-blocking acquire was made in the window between a token being released and the notified waiter resuming. The freed token is now reserved for the woken waiter right away, so the non-blocking acquire correctly raises \u003ccode\u003eWouldBlock\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1170\"\u003e#1170\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed unnecessary CPU spin when delivering cancellation from \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio under certain conditions, including improper cancel scope nesting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1111\"\u003e#1111\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\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/c384f99687c64c59ed8a11c3a0f11a2d57daff71\"\u003e\u003ccode\u003ec384f99\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/dbba29d1ade7936f18fb71ba24aa92978673482a\"\u003e\u003ccode\u003edbba29d\u003c/code\u003e\u003c/a\u003e Fixed 100% CPU spin on cancel scope misuse (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1217\"\u003e#1217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6bbc6c33caabc13af5bc4256f745027cf8d5d7b8\"\u003e\u003ccode\u003e6bbc6c3\u003c/code\u003e\u003c/a\u003e Fix CapacityLimiter over-granting tokens on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f82b2537cbbe98f3df3f295499056ab7de0b15b\"\u003e\u003ccode\u003e6f82b25\u003c/code\u003e\u003c/a\u003e Refactored TestTLSStream.test_receive_invalid_max_bytes() to be less flaky\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/be24b0414f67f604bcbdd5ea3bcc56ab920d872e\"\u003e\u003ccode\u003ebe24b04\u003c/code\u003e\u003c/a\u003e Relaxed timeouts to fix test flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/81135065749b4f60c06619b9caaf0a11871c1ddf\"\u003e\u003ccode\u003e8113506\u003c/code\u003e\u003c/a\u003e Fix test flakiness caused by slow callback duration logging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1e988b617b69588e33fecb75e36a9837245f562f\"\u003e\u003ccode\u003e1e988b6\u003c/code\u003e\u003c/a\u003e Fixed CapacityLimiter raising trio.WouldBlock instead of anyio.WouldBlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44713f345cd29dd4e7d76553c134543a1296cc62\"\u003e\u003ccode\u003e44713f3\u003c/code\u003e\u003c/a\u003e Pin setup-uv to a commit sha across downstream jobs (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f1b7301c8264b0d2e8d24a5788fd29e93dea4040\"\u003e\u003ccode\u003ef1b7301\u003c/code\u003e\u003c/a\u003e Fixed stderr writes in a worker subprocess causing a deadlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1207\"\u003e#1207\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/212be93c2cf2c841e753e95e5e2c543ee7feca90\"\u003e\u003ccode\u003e212be93\u003c/code\u003e\u003c/a\u003e Fix flaky test_tcp_listener_same_port using a hardcoded port (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1206\"\u003e#1206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.0...4.14.2\"\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.33 to 1.43.55\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2a09bb61f3d89224a4d9ceea1ac25320052d8592\"\u003e\u003ccode\u003e2a09bb6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.55'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/ffe76ba3d1fd3c8b65d4622325f64ac9c744084a\"\u003e\u003ccode\u003effe76ba\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.55\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/74d20c986a904773fe1b29e0773c9ba7e9c9582c\"\u003e\u003ccode\u003e74d20c9\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/c073381321bd3816f1af247b7e914b306597d939\"\u003e\u003ccode\u003ec073381\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.54'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/5e554e5a627172ba5ea27e04991ea03d62b293f2\"\u003e\u003ccode\u003e5e554e5\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.54' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2ad1683fd0c19f995e073ab4ebc1c4b1c465eb90\"\u003e\u003ccode\u003e2ad1683\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.54\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c613376945fa5c42bd2fbf266a17355863d929b2\"\u003e\u003ccode\u003ec613376\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/a939926a123d97bd842ffc6ec4a0affc35bf3d42\"\u003e\u003ccode\u003ea939926\u003c/code\u003e\u003c/a\u003e Bump zizmorcore/zizmor-action in the github-actions group (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4819\"\u003e#4819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b6042c3698a7d62da6159077fcbe984c0b02902d\"\u003e\u003ccode\u003eb6042c3\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/boto3/issues/4820\"\u003e#4820\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d554104c35b28db00b8da474dc4d56a0703da31d\"\u003e\u003ccode\u003ed554104\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.53'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.33...1.43.55\"\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.33 to 1.43.55\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/b71d5637f58df4bc61953b80902b3c040c7af889\"\u003e\u003ccode\u003eb71d563\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.55'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/f4ac9cdcf071f9c8935be0f09fcc520c93257a16\"\u003e\u003ccode\u003ef4ac9cd\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.55\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/0c5445a7bf2a658d68a9bfb979bec422630f5a28\"\u003e\u003ccode\u003e0c5445a\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c823f70df3d47062845d8c8d84497e5c62da35df\"\u003e\u003ccode\u003ec823f70\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/3758\"\u003e#3758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/cda624e08b0b67339dd41f76c7afb4bfff235fe6\"\u003e\u003ccode\u003ecda624e\u003c/code\u003e\u003c/a\u003e Bump zizmorcore/zizmor-action in the github-actions group (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3757\"\u003e#3757\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/02b0742be1faccdedbb305babb66aac1f33e95b3\"\u003e\u003ccode\u003e02b0742\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.54'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e33fd6696f3646f3da10684326bd6c79fb9474a1\"\u003e\u003ccode\u003ee33fd66\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.54' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/6ed607008ed9bcfbe7a9e49a586c16d210f18568\"\u003e\u003ccode\u003e6ed6070\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.54\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/770567f78fceecb4e20d777d1de8a0b4913d2316\"\u003e\u003ccode\u003e770567f\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/3c05720178c4c85ffc8f61ea6298b8a9f675d45c\"\u003e\u003ccode\u003e3c05720\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.33...1.43.55\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.6.17 to 2026.7.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/f4bc676bc101fe2235846e37044e8c693d6cbaf4\"\u003e\u003ccode\u003ef4bc676\u003c/code\u003e\u003c/a\u003e 2026.07.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/428\"\u003e#428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4c91f9c5f9b4676d40d2930025ba04d80dd536f6\"\u003e\u003ccode\u003e4c91f9c\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.3.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/01a66c5cf32eadb8f03a0504c24cb44f6d581248\"\u003e\u003ccode\u003e01a66c5\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/426\"\u003e#426\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/eb355f41cb71f71012ecf1a4d27a57d0ee2b1337\"\u003e\u003ccode\u003eeb355f4\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/474e6fc996d55b91632248da0bade702504e62dc\"\u003e\u003ccode\u003e474e6fc\u003c/code\u003e\u003c/a\u003e Include tests in the source distribution (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/424\"\u003e#424\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/a31ef39bb5906af7dc9729890f7e4e04e75afdae\"\u003e\u003ccode\u003ea31ef39\u003c/code\u003e\u003c/a\u003e Bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/98eb2c76a9c7a8519912023dca00f762bbcd59af\"\u003e\u003ccode\u003e98eb2c7\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.3 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.06.17...2026.07.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.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 `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 `filelock` from 3.29.4 to 3.32.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.32.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e👷 ci: add Python 3.15 to the test matrix 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/683\"\u003etox-dev/filelock#683\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(packaging): let an unpacked sdist run the test suite 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/685\"\u003etox-dev/filelock#685\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.31.2...3.32.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.31.2...3.32.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.31.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(strict): tolerate an errno without ENOTSUP 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/681\"\u003etox-dev/filelock#681\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.31.1...3.31.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.31.1...3.31.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.31.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ refactor(coverage): key exclusions on probed capability 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/679\"\u003etox-dev/filelock#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003escope a lease's claim to the context that acquired it 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/680\"\u003etox-dev/filelock#680\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.31.0...3.31.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.31.0...3.31.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.31.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(platform): support Termux/Android by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/678\"\u003etox-dev/filelock#678\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/673\"\u003etox-dev/filelock#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs(mermaid): follow the light and dark theme toggle by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/674\"\u003etox-dev/filelock#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003easyncio: scope the reentrant-deadlock registry to the owning task by \u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.32.0 (2026-07-21)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eSoftReadWriteLock\u003c/code\u003e closes the directory handle it opens to scan for readers as soon as a scan stops early, rather\nthan holding it until the generator is collected. :pr:\u003ccode\u003e685\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeclare support for Python 3.15 and run the test suite against it and its free-threaded build, both currently in beta. :pr:\u003ccode\u003e683\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eThe source distribution ships the capability probes the tests import, and reading one no longer needs \u003ccode\u003ecoverage\u003c/code\u003e\ninstalled, so the suite runs from an unpacked sdist instead of failing on a missing \u003ccode\u003ecoverage_pragmas\u003c/code\u003e. :pr:\u003ccode\u003e685\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.2 (2026-07-21)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003efilelock\u003c/code\u003e imports again on runtimes whose \u003ccode\u003eerrno\u003c/code\u003e omits \u003ccode\u003eENOTSUP\u003c/code\u003e, such as GraalPy, where importing the package\nraised \u003ccode\u003eImportError\u003c/code\u003e. It probes the code instead, preferring \u003ccode\u003eENOTSUP\u003c/code\u003e, falling back to \u003ccode\u003eEOPNOTSUPP\u003c/code\u003e where that\nname is absent, and dropping to \u003ccode\u003eENOSYS\u003c/code\u003e/\u003ccode\u003eEXDEV\u003c/code\u003e where neither exists. Platforms defining \u003ccode\u003eENOTSUP\u003c/code\u003e keep their\nbehavior. :pr:\u003ccode\u003e681\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.1 (2026-07-20)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eA \u003ccode\u003eSoftFileLease\u003c/code\u003e acquired on one thread keeps its claim when another thread fails to acquire the same lease object,\nso its heartbeat carries on refreshing the marker instead of being torn down and letting a peer take the live claim. :pr:\u003ccode\u003e680\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.0 (2026-07-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Termux/Android, whose CPython ships without \u003ccode\u003eos.link\u003c/code\u003e and reports \u003ccode\u003esys.platform == \u0026quot;android\u0026quot;\u003c/code\u003e. \u003ccode\u003eimport filelock\u003c/code\u003e and both \u003ccode\u003eFileLock\u003c/code\u003e and \u003ccode\u003eSoftFileLock\u003c/code\u003e now work there, \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e reports its missing\nhard-link support only when acquired, and process liveness reads \u003ccode\u003e/proc\u003c/code\u003e on Android instead of PID-only checks. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e no longer lets two processes hold the lock at once under heavy contention. A holder now keeps\nits intent claim for the whole hold, so a contender whose directory scan races the holder's freshly linked claim can no\nlonger miss it and win alongside it. A held lock now exposes both an \u003ccode\u003eintent\u003c/code\u003e and a \u003ccode\u003eheld\u003c/code\u003e claim. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.3 (2026-07-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eAsyncFileLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLock\u003c/code\u003e no longer raise a deadlock \u003ccode\u003eRuntimeError\u003c/code\u003e when a different asyncio task\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/76525e6e5ca0fded86809d82096083c6c11b8b16\"\u003e\u003ccode\u003e76525e6\u003c/code\u003e\u003c/a\u003e Release 3.32.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9824d15e01898b46231c174e06788b7469959079\"\u003e\u003ccode\u003e9824d15\u003c/code\u003e\u003c/a\u003e 🐛 fix(packaging): let an unpacked sdist run the test suite (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/685\"\u003e#685\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f6c41e9f467dd8483b05e1f9b04f0b0129d07fbe\"\u003e\u003ccode\u003ef6c41e9\u003c/code\u003e\u003c/a\u003e 👷 ci: add Python 3.15 to the test matrix (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/683\"\u003e#683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/caeb1c92f5eef9068ba8ed55cd2fb033a855ffe5\"\u003e\u003ccode\u003ecaeb1c9\u003c/code\u003e\u003c/a\u003e Release 3.31.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/60eda0f9ec8b4b7efdcb429102ea8b3e7f9f9518\"\u003e\u003ccode\u003e60eda0f\u003c/code\u003e\u003c/a\u003e 🐛 fix(strict): tolerate an errno without ENOTSUP (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/681\"\u003e#681\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/c1b2e6fdbb8f2307e06dbc1543314194e3250139\"\u003e\u003ccode\u003ec1b2e6f\u003c/code\u003e\u003c/a\u003e Release 3.31.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9fd7de55e1109fee751173ad3842cf909349ce9f\"\u003e\u003ccode\u003e9fd7de5\u003c/code\u003e\u003c/a\u003e scope a lease's claim to the context that acquired it (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/680\"\u003e#680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/2b3ad2c561889f340975bc62a48969e1fb4109d6\"\u003e\u003ccode\u003e2b3ad2c\u003c/code\u003e\u003c/a\u003e ♻️ refactor(coverage): key exclusions on probed capability (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/679\"\u003e#679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3b66fdc1432e3b02e83525e61a99096aa09a933f\"\u003e\u003ccode\u003e3b66fdc\u003c/code\u003e\u003c/a\u003e Release 3.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/166b2b5d723a2e111be36a8b43e594a97141c0fd\"\u003e\u003ccode\u003e166b2b5\u003c/code\u003e\u003c/a\u003e ✨ feat(platform): support Termux/Android (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/678\"\u003e#678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.4...3.32.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hf-xet` from 1.5.1 to 1.5.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/xet-core/releases\"\u003ehf-xet's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[hf-xet v1.5.2] Fix HTTP Request Retry\u003c/h2\u003e\n\u003ch2\u003eProblems addressed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis release fixes a bug in HTTP request retry configuration that could cause apparent hangs under poor network conditions when a request was retried more than twice. Related PR: \u003ca href=\"https://redirect.github.com/huggingface/xet-core/pull/893\"\u003ehuggingface/xet-core#893\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/kszucs\"\u003e\u003ccode\u003e@​kszucs\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/huggingface/xet-core/pull/872\"\u003ehuggingface/xet-core#872\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/huggingface/xet-core/compare/v1.5.1...v1.5.2\"\u003ehttps://github.com/huggingface/xet-core/compare/v1.5.1...v1.5.2\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/huggingface/xet-core/commit/cb96dfe14f3208203bd5ffb791771f4fd4c41f2e\"\u003e\u003ccode\u003ecb96dfe\u003c/code\u003e\u003c/a\u003e Bump hf-xet to 1.5.2 (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/902\"\u003e#902\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/fc6cbec1828c472b57f4555818e14aa69ff10b9e\"\u003e\u003ccode\u003efc6cbec\u003c/code\u003e\u003c/a\u003e Fix retry strategy configuration (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/893\"\u003e#893\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/553480bdbb0a2d1d749adc877240d9813f3b0205\"\u003e\u003ccode\u003e553480b\u003c/code\u003e\u003c/a\u003e Update xtool to add GC simulation functionality  (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/759\"\u003e#759\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/f8598c231e863f0a647586d033ea03cfa2a25e46\"\u003e\u003ccode\u003ef8598c2\u003c/code\u003e\u003c/a\u003e chore: bump crate versions to 1.5.3 (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/890\"\u003e#890\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/0e4740050f3dc26c263ca3d170c179c78ce16f55\"\u003e\u003ccode\u003e0e47400\u003c/code\u003e\u003c/a\u003e fix(client): call versioned /v1/shards endpoint for shard uploads (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/879\"\u003e#879\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/9d4e182872fe0d0cd9c8382035655628b01b10f7\"\u003e\u003ccode\u003e9d4e182\u003c/code\u003e\u003c/a\u003e feat: add lifecycle-tag deletion mode to simulation clients (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/882\"\u003e#882\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/bebdf4b5aaad56318cfb9999f80e75760da59a5e\"\u003e\u003ccode\u003ebebdf4b\u003c/code\u003e\u003c/a\u003e feat: gate internal-only dependencies behind an \u003ccode\u003einternal-tools\u003c/code\u003e feature (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/872\"\u003e#872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/f408d7f4b59fe1559d20c2e8ee4a2d61476d0c8f\"\u003e\u003ccode\u003ef408d7f\u003c/code\u003e\u003c/a\u003e Drop hf-xet Python release for Python 3.13t (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/877\"\u003e#877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/8680670fe0c56fc562ce4f3d7eecee89d2bcc9b9\"\u003e\u003ccode\u003e8680670\u003c/code\u003e\u003c/a\u003e feat(wasm): make hf-xet compile for wasm32-unknown-unknown (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/841\"\u003e#841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/xet-core/commit/a79cd63650406242976eac004f034c52f9bd6eac\"\u003e\u003ccode\u003ea79cd63\u003c/code\u003e\u003c/a\u003e build: bump pyo3 0.26 → 0.29 (fix RUSTSEC-2026-0176/0177) (\u003ca href=\"https://redirect.github.com/huggingface/xet-core/issues/876\"\u003e#876\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/huggingface/xet-core/compare/v1.5.1...v1.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `html5tagger` from 1.3.0 to 2.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sanic-org/html5tagger/releases\"\u003ehtml5tagger's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBREAKING: Templating redux by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/13\"\u003esanic-org/html5tagger#13\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBenchmark against Jinja by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/16\"\u003esanic-org/html5tagger#16\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003edoc[bool]\u003c/code\u003e conditional no-op toggle for \u003ccode\u003ewith\u003c/code\u003e statements by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/15\"\u003esanic-org/html5tagger#15\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sanic-org/html5tagger/compare/v1.4.0...v2.0.0\"\u003ehttps://github.com/sanic-org/html5tagger/compare/v1.4.0...v2.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.4.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eModernise package by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/12\"\u003esanic-org/html5tagger#12\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMake doc.script and doc.style work as expected. by \u003ca href=\"https://github.com/Tronic\"\u003e\u003ccode\u003e@​Tronic\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/14\"\u003esanic-org/html5tagger#14\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd [CSS selector] id/class/attribute setting and (classes=...) for appending to class by \u003ca href=\"https://github.com/ahopkins\"\u003e\u003ccode\u003e@​ahopkins\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/pull/9\"\u003esanic-org/html5tagger#9\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe templating support introduced in v1.3 is deprecated and will be removed in v2.0 for a redesigned system\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/sanic-org/html5tagger/compare/v1.3.0...v1.4.0\"\u003ehttps://github.com/sanic-org/html5tagger/compare/v1.3.0...v1.4.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/sanic-org/html5tagger/commit/e3e0c044784d7409fcc823dde1bd83d531b4c288\"\u003e\u003ccode\u003ee3e0c04\u003c/code\u003e\u003c/a\u003e README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/728b0d7906aa4b7fcdf0602c5810126a234ed404\"\u003e\u003ccode\u003e728b0d7\u003c/code\u003e\u003c/a\u003e Benchmark against Jinja (\u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/issues/16\"\u003e#16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/fc1eca708772e25e42cfa59fc18c966e06c8407a\"\u003e\u003ccode\u003efc1eca7\u003c/code\u003e\u003c/a\u003e README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/37dbb47a06d48cbd6a91d282b23b8d929e41ff50\"\u003e\u003ccode\u003e37dbb47\u003c/code\u003e\u003c/a\u003e Update test and coverage badges [skip ci]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/38c19e9caacf31ba33d7ea42a282078f676aee36\"\u003e\u003ccode\u003e38c19e9\u003c/code\u003e\u003c/a\u003e Add tests and coverage badges.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/f68bd517fc8eeea558f3d91898ea44e68757f5d5\"\u003e\u003ccode\u003ef68bd51\u003c/code\u003e\u003c/a\u003e Test added for missing coverage.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/1109d28debb9b3a829a62832334a0e609e57bc4c\"\u003e\u003ccode\u003e1109d28\u003c/code\u003e\u003c/a\u003e Additional typing, tested compatible with mypy and ty.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/bc6058ee847b4742e1fbb404f48108bbf8465895\"\u003e\u003ccode\u003ebc6058e\u003c/code\u003e\u003c/a\u003e Cleanup README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/209a43eac1823eea0fb748647417ad90f0ca5b6a\"\u003e\u003ccode\u003e209a43e\u003c/code\u003e\u003c/a\u003e Cleanup README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sanic-org/html5tagger/commit/6d2e88d376ad5387f387f713324ec081d851d86d\"\u003e\u003ccode\u003e6d2e88d\u003c/code\u003e\u003c/a\u003e Templating redux (\u003ca href=\"https://redirect.github.com/sanic-org/html5tagger/issues/13\"\u003e#13\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/sanic-org/html5tagger/compare/v1.3.0...v2.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `huggingface-hub` from 1.20.1 to 1.24.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.c...\n\n_Description has been truncated_","html_url":"https://github.com/Watts-Lab/atlas/pull/256","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Watts-Lab%2Fatlas/issues/256","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/256/packages"}},{"old_version":"3.29.7","new_version":"3.31.1","update_type":"minor","path":null,"pr_created_at":"2026-07-20T05:22:39.000Z","version_change":"3.29.7 → 3.31.1","issue":{"uuid":"4926034338","node_id":"PR_kwDOTHoTgc7zsgH6","number":52,"state":"open","title":"build(deps): bump the python-minor-patch group across 1 directory with 22 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-20T05:22:39.000Z","updated_at":"2026-07-20T05:22:40.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-minor-patch","update_count":22,"packages":[{"name":"fastapi","old_version":"0.139.0","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.50.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"hatchet-sdk","old_version":"1.33.15","new_version":"1.35.0"},{"name":"anthropic","old_version":"0.116.0","new_version":"0.117.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"openai","old_version":"2.44.0","new_version":"2.46.0","repository_url":"https://github.com/openai/openai-python"},{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"anyio","old_version":"4.14.1","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"grpcio","old_version":"1.81.1","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"grpcio-tools","old_version":"1.81.1","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"joserfc","old_version":"1.7.2","new_version":"1.7.4","repository_url":"https://github.com/authlib/joserfc"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"},{"name":"yarl","old_version":"1.24.2","new_version":"1.24.5","repository_url":"https://github.com/aio-libs/yarl"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.7","new_version":"3.31.1","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"platformdirs","old_version":"4.10.0","new_version":"4.10.1","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"pypdf","old_version":"6.13.3","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"browser-use","old_version":"0.13.3","new_version":"0.13.6","repository_url":"https://github.com/browser-use/browser-use"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 22 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.139.0` | `0.139.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.50.0` | `0.51.0` |\n| hatchet-sdk | `1.33.15` | `1.35.0` |\n| [anthropic](https://github.com/anthropics/anthropic-sdk-python) | `0.116.0` | `0.117.0` |\n| [openai](https://github.com/openai/openai-python) | `2.44.0` | `2.46.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.15.22` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.1` | `4.14.2` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.1` | `1.82.1` |\n| [grpcio-tools](https://github.com/grpc/grpc) | `1.81.1` | `1.82.1` |\n| [joserfc](https://github.com/authlib/joserfc) | `1.7.2` | `1.7.4` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.69.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n| [yarl](https://github.com/aio-libs/yarl) | `1.24.2` | `1.24.5` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.7` | `3.31.1` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.10.0` | `4.10.1` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.3` | `6.14.2` |\n| [browser-use](https://github.com/browser-use/browser-use) | `0.13.3` | `0.13.6` |\n\n\nUpdates `fastapi` from 0.139.0 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.139.0...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.50.0 to 0.51.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansio implementation by \u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.1 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3019\"\u003e#3019\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e4d0b05eb8c6459b7ba27ad13a2c2f4f8d4ece50\"\u003e\u003ccode\u003ee4d0b05\u003c/code\u003e\u003c/a\u003e Version 0.51.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3028\"\u003e#3028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/944e43ddbf715aea7c587f2738cd94c3f9106110\"\u003e\u003ccode\u003e944e43d\u003c/code\u003e\u003c/a\u003e Remove colorama from the standard extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2e787704f2610133059e76d56bbd60f48edd34a3\"\u003e\u003ccode\u003e2e78770\u003c/code\u003e\u003c/a\u003e Restart workers with overlap on SIGHUP for near-zero-downtime reloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a1b570cf577d512bfd396b64d72313233e9c3325\"\u003e\u003ccode\u003ea1b570c\u003c/code\u003e\u003c/a\u003e Version 0.50.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3022\"\u003e#3022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/83c7da7332ac3100171c258071de40d5dde35e13\"\u003e\u003ccode\u003e83c7da7\u003c/code\u003e\u003c/a\u003e Require websockets\u0026gt;=13.0 for the default sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b4d011668a75d02370353f34de6dea59692dcad2\"\u003e\u003ccode\u003eb4d0116\u003c/code\u003e\u003c/a\u003e Version 0.50.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a9151d0e763df2c56da2bfe8c5dcead4fe5a276\"\u003e\u003ccode\u003e2a9151d\u003c/code\u003e\u003c/a\u003e Split comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1bf3ab42e3aba1cf4acd1ef0c29d8ad9a599d333\"\u003e\u003ccode\u003e1bf3ab4\u003c/code\u003e\u003c/a\u003e Cover the excluded-directory branch in \u003ccode\u003eFileFilter\u003c/code\u003e with a direct test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/837b5f960dbe2f03e9f12feb9955ce2217211ad8\"\u003e\u003ccode\u003e837b5f9\u003c/code\u003e\u003c/a\u003e Deflake multiprocess, reload, and signal supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2975\"\u003e#2975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.51.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hatchet-sdk` from 1.33.15 to 1.35.0\n\nUpdates `anthropic` from 0.116.0 to 0.117.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/releases\"\u003eanthropic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.117.0\u003c/h2\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ecredentials:\u003c/strong\u003e keep credential material out of traceback frame locals via SecretStr (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/aa93a4dbf383f7fdab1404c136e86d4679d644c1\"\u003eaa93a4d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates to field descriptions (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/75d8dcc0ac8cb381fa327a61a9ac84022b3a1677\"\u003e75d8dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model example (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a57e30ac1bafb54387bf631be2081bfdb3782911\"\u003ea57e30a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e updates to descriptions and examples (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e1535b6919441448dddf00e2636cb8c60a721a43\"\u003ee1535b6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/blob/main/CHANGELOG.md\"\u003eanthropic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.117.0 (2026-07-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ev0.116.0...v0.117.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for dreaming (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/642eee707b0fe3c35c21917f60b06846b2a3b291\"\u003e642eee7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for MCP Tunnels (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d716df6edb1df7de25f1b5e14dcab33b9aafc2ff\"\u003ed716df6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ecredentials:\u003c/strong\u003e keep credential material out of traceback frame locals via SecretStr (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/aa93a4dbf383f7fdab1404c136e86d4679d644c1\"\u003eaa93a4d\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e small updates to field descriptions (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/75d8dcc0ac8cb381fa327a61a9ac84022b3a1677\"\u003e75d8dcc\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e update model example (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a57e30ac1bafb54387bf631be2081bfdb3782911\"\u003ea57e30a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003edocs:\u003c/strong\u003e updates to descriptions and examples (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e1535b6919441448dddf00e2636cb8c60a721a43\"\u003ee1535b6\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3c8bdf14bc55377262f11d6c34b893834a02b3fc\"\u003e\u003ccode\u003e3c8bdf1\u003c/code\u003e\u003c/a\u003e release: 0.117.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/db820820aba78e8af45d0a02afc3948006ab6021\"\u003e\u003ccode\u003edb82082\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/bc2f6e4a7a53ac362d3dce04d2d7cf044403bf81\"\u003e\u003ccode\u003ebc2f6e4\u003c/code\u003e\u003c/a\u003e feat(api): add support for MCP Tunnels\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/3541444ba348e95162081f1a45877478a7d90fa7\"\u003e\u003ccode\u003e3541444\u003c/code\u003e\u003c/a\u003e test(beta): cover parse() header merging with caller extra_headers (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/824de14e5be54d4fe268d52ed8fd3c00cb909be2\"\u003e\u003ccode\u003e824de14\u003c/code\u003e\u003c/a\u003e feat(api): add support for dreaming\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/26ce65ac3f7530e092a56f5557b4ed703d592964\"\u003e\u003ccode\u003e26ce65a\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/6d9ee332c38335cb1d1d5d2669d57b351b917770\"\u003e\u003ccode\u003e6d9ee33\u003c/code\u003e\u003c/a\u003e chore(docs): update model example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/c7ee42192bcbfbd7659777dd6ba5efa7be8407fb\"\u003e\u003ccode\u003ec7ee421\u003c/code\u003e\u003c/a\u003e Block ask-gated session tool calls until user confirmation (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/16\"\u003e#16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/97b130e6f0b695a961795211d9a7458af9455fb2\"\u003e\u003ccode\u003e97b130e\u003c/code\u003e\u003c/a\u003e chore(docs): updates to descriptions and examples\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/fb1e755153df78b8b5691b3e42380b7409144536\"\u003e\u003ccode\u003efb1e755\u003c/code\u003e\u003c/a\u003e fix(credentials): keep credential material out of traceback frame locals via ...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.116.0...v0.117.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.44.0 to 2.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.46.0\u003c/h2\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys\u0026quot; endpoint (\u003ca href=\"https://github.com/openai/openai-python/commit/5a0094194eac9c605c8ca84d47d1c5518f8e2131\"\u003e5a00941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add owner_project_access to APIKeyListParams (\u003ca href=\"https://github.com/openai/openai-python/commit/f589d04bf9f377ecb1f54335ab3ab9d825b5dfee\"\u003ef589d04\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/980f176e83ee5d991bf9e8e4def80d9905ade5ec\"\u003e980f176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/2eae984315580cdbf9ceb14d6cb568c581baa768\"\u003e2eae984\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e preserve generated type compatibility (\u003ca href=\"https://github.com/openai/openai-python/commit/00bd72adbe03f4b5c4b89d91b8d317f11b58bbdf\"\u003e00bd72a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove beta annotation compatibility aliases (\u003ca href=\"https://github.com/openai/openai-python/commit/99dbd15ff3ad1628b94a729a6b688212d4655908\"\u003e99dbd15\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.45.0\u003c/h2\u003e\n\u003ch2\u003e2.45.0 (2026-07-09)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.45.0\"\u003ev2.44.0...v2.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e gpt-5.6-sol updates (\u003ca href=\"https://github.com/openai/openai-python/commit/039d1feb264a2dca7195ba5028e9fb47a5e04987\"\u003e039d1fe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore beta resource accessors (\u003ca href=\"https://github.com/openai/openai-python/commit/2dfc130b8f0fdb0049e075aac21aaef29482b4e3\"\u003e2dfc130\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/7b61351b014bb6ca4623ff6cce7f32f45038a92e\"\u003e7b61351\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/blob/main/CHANGELOG.md\"\u003eopenai's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{service_account_id}/api_keys\u0026quot; endpoint (\u003ca href=\"https://github.com/openai/openai-python/commit/5a0094194eac9c605c8ca84d47d1c5518f8e2131\"\u003e5a00941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add owner_project_access to APIKeyListParams (\u003ca href=\"https://github.com/openai/openai-python/commit/f589d04bf9f377ecb1f54335ab3ab9d825b5dfee\"\u003ef589d04\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/980f176e83ee5d991bf9e8e4def80d9905ade5ec\"\u003e980f176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e manual updates (\u003ca href=\"https://github.com/openai/openai-python/commit/2eae984315580cdbf9ceb14d6cb568c581baa768\"\u003e2eae984\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e preserve generated type compatibility (\u003ca href=\"https://github.com/openai/openai-python/commit/00bd72adbe03f4b5c4b89d91b8d317f11b58bbdf\"\u003e00bd72a\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove beta annotation compatibility aliases (\u003ca href=\"https://github.com/openai/openai-python/commit/99dbd15ff3ad1628b94a729a6b688212d4655908\"\u003e99dbd15\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.45.0 (2026-07-09)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.45.0\"\u003ev2.44.0...v2.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e gpt-5.6-sol updates (\u003ca href=\"https://github.com/openai/openai-python/commit/039d1feb264a2dca7195ba5028e9fb47a5e04987\"\u003e039d1fe\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e restore beta resource accessors (\u003ca href=\"https://github.com/openai/openai-python/commit/2dfc130b8f0fdb0049e075aac21aaef29482b4e3\"\u003e2dfc130\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eretrigger release automation (\u003ca href=\"https://github.com/openai/openai-python/commit/7b61351b014bb6ca4623ff6cce7f32f45038a92e\"\u003e7b61351\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/0e6adb15adc1e74087bcb402de7a75e4fbc0aecb\"\u003e\u003ccode\u003e0e6adb1\u003c/code\u003e\u003c/a\u003e release: 2.46.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3501\"\u003e#3501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f16fbbd2bd25dc1ff150b5f78dbd15ff6bab6d91\"\u003e\u003ccode\u003ef16fbbd\u003c/code\u003e\u003c/a\u003e release: 2.45.0 (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3478\"\u003e#3478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.44.0...v2.46.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch3\u003ePackaging changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer provide mypyc-accelerated wheels for macOS x86_64 [mypyc-wheels \u003ca href=\"https://redirect.github.com/python/mypy/issues/119\"\u003e#119\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/mypyc/mypy_mypyc-wheels/pull/119\"\u003emypyc/mypy_mypyc-wheels#119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.1 to 4.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged \u003ccode\u003eByteReceiveStream.receive()\u003c/code\u003e implementations to raise a \u003ccode\u003eValueError\u003c/code\u003e when \u003ccode\u003emax_bytes\u003c/code\u003e is not a positive integer (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1191\"\u003e#1191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting \u003ccode\u003efloat(\u0026quot;inf\u0026quot;)\u003c/code\u003e when the limiter was instantiated outside of an event loop. The adapter setter checked for infinity by identity (\u003ccode\u003evalue is math.inf\u003c/code\u003e), so only the exact \u003ccode\u003emath.inf\u003c/code\u003e singleton was accepted, while every backend setter (using \u003ccode\u003emath.isinf()\u003c/code\u003e) accepts any positive infinity (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1189\"\u003e#1189\u003c/a\u003e; PR by \u003ca href=\"https://github.com/greymoth-jp\"\u003e\u003ccode\u003e@​greymoth-jp\u003c/code\u003e\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eto_process.run_sync()\u003c/code\u003e deadlocking when the worker function writes enough data to \u003ccode\u003esys.stderr\u003c/code\u003e to fill the (undrained) pipe buffer. The worker process now redirects \u003ccode\u003esys.stderr\u003c/code\u003e to \u003ccode\u003eos.devnull\u003c/code\u003e as well, matching the documented behavior\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eTLSStream.wrap()\u003c/code\u003e matching an internationalized (unicode) host name against the peer certificate using IDNA 2003 (via the standard library) instead of IDNA 2008, which could cause the host name to be matched against the wrong certificate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1208\"\u003e#1208\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eanyio.open_process()\u003c/code\u003e (and \u003ccode\u003erun_process()\u003c/code\u003e) ignoring the \u003ccode\u003eextra_groups\u003c/code\u003e argument, as it mistakenly passed the value of the \u003ccode\u003egroup\u003c/code\u003e argument instead (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1209\"\u003e#1209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.acquire_nowait()\u003c/code\u003e and \u003ccode\u003eCapacityLimiter.acquire_nowait_on_behalf_of()\u003c/code\u003e raising \u003ccode\u003etrio.WouldBlock\u003c/code\u003e instead of \u003ccode\u003eanyio.WouldBlock\u003c/code\u003e on the \u003ccode\u003etrio\u003c/code\u003e backend when there are no tokens available (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1218\"\u003e#1218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter\u003c/code\u003e on the asyncio backend over-granting tokens (\u003ccode\u003eborrowed_tokens\u003c/code\u003e exceeding \u003ccode\u003etotal_tokens\u003c/code\u003e and \u003ccode\u003eavailable_tokens\u003c/code\u003e going negative) when a non-blocking acquire was made in the window between a token being released and the notified waiter resuming. The freed token is now reserved for the woken waiter right away, so the non-blocking acquire correctly raises \u003ccode\u003eWouldBlock\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1170\"\u003e#1170\u003c/a\u003e; PR by \u003ca href=\"https://github.com/gaoflow\"\u003e\u003ccode\u003e@​gaoflow\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed unnecessary CPU spin when delivering cancellation from \u003ccode\u003eCancelScope\u003c/code\u003e on asyncio under certain conditions, including improper cancel scope nesting (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1111\"\u003e#1111\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/c384f99687c64c59ed8a11c3a0f11a2d57daff71\"\u003e\u003ccode\u003ec384f99\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/dbba29d1ade7936f18fb71ba24aa92978673482a\"\u003e\u003ccode\u003edbba29d\u003c/code\u003e\u003c/a\u003e Fixed 100% CPU spin on cancel scope misuse (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1217\"\u003e#1217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6bbc6c33caabc13af5bc4256f745027cf8d5d7b8\"\u003e\u003ccode\u003e6bbc6c3\u003c/code\u003e\u003c/a\u003e Fix CapacityLimiter over-granting tokens on asyncio (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1172\"\u003e#1172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/6f82b2537cbbe98f3df3f295499056ab7de0b15b\"\u003e\u003ccode\u003e6f82b25\u003c/code\u003e\u003c/a\u003e Refactored TestTLSStream.test_receive_invalid_max_bytes() to be less flaky\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/be24b0414f67f604bcbdd5ea3bcc56ab920d872e\"\u003e\u003ccode\u003ebe24b04\u003c/code\u003e\u003c/a\u003e Relaxed timeouts to fix test flakiness\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/81135065749b4f60c06619b9caaf0a11871c1ddf\"\u003e\u003ccode\u003e8113506\u003c/code\u003e\u003c/a\u003e Fix test flakiness caused by slow callback duration logging\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1e988b617b69588e33fecb75e36a9837245f562f\"\u003e\u003ccode\u003e1e988b6\u003c/code\u003e\u003c/a\u003e Fixed CapacityLimiter raising trio.WouldBlock instead of anyio.WouldBlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/44713f345cd29dd4e7d76553c134543a1296cc62\"\u003e\u003ccode\u003e44713f3\u003c/code\u003e\u003c/a\u003e Pin setup-uv to a commit sha across downstream jobs (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f1b7301c8264b0d2e8d24a5788fd29e93dea4040\"\u003e\u003ccode\u003ef1b7301\u003c/code\u003e\u003c/a\u003e Fixed stderr writes in a worker subprocess causing a deadlock (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1207\"\u003e#1207\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/212be93c2cf2c841e753e95e5e2c543ee7feca90\"\u003e\u003ccode\u003e212be93\u003c/code\u003e\u003c/a\u003e Fix flaky test_tcp_listener_same_port using a hardcoded port (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1206\"\u003e#1206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.1...4.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.3 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.1/\"\u003ehttps://pypi.org/project/click/8.4.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-1\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-1\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/32\"\u003ehttps://github.com/pallets/click/milestone/32\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type conversion again. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3458\"\u003e#3458\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3277\"\u003e#3277\u003c/a\u003e # 3466\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion result. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3015\"\u003e#3015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3487\"\u003e#3487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our [Version Support Policy][version] on our website.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.1\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type\nconversion again. {issue}\u003ccode\u003e3458\u003c/code\u003e {pr}\u003ccode\u003e3484\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. {issue}\u003ccode\u003e3277\u003c/code\u003e {pr}\u003ccode\u003e3466\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eEnum\u003c/code\u003e values used as \u003ccode\u003eChoice\u003c/code\u003e options produces a\nvalid completion result. {issue}\u003ccode\u003e3015\u003c/code\u003e {pr}\u003ccode\u003e3471\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. {issue}\u003ccode\u003e3487\u003c/code\u003e {pr}\u003ccode\u003e3493\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e {pr}\u003ccode\u003e3482\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eopen_url\u003c/code\u003e on Windows when the file path contains spaces.\n{issue}\u003ccode\u003e2994\u003c/code\u003e {pr}\u003ccode\u003e3478\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 8.4.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-17\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e{class}\u003ccode\u003eParamType\u003c/code\u003e typing improvements. {pr}\u003ccode\u003e3371\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e{class}\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.3...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.81.1 to 1.82.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.82.1\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.82.1 (glacier).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003ePython\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[Backport][v1.82.x][Python] Update lower bound for protobuf from 6.33.5 to 7.35.1 by \u003ca href=\"https://github.com/asheshvidyut\"\u003e\u003ccode\u003e@​asheshvidyut\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42920\"\u003egrpc/grpc#42920\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/grpc/grpc/compare/v1.82.0...v1.82.1\"\u003ehttps://github.com/grpc/grpc/compare/v1.82.0...v1.82.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eRelease v1.82.0\u003c/h2\u003e\n\u003cp\u003eThis is release gRPC Core 1.82.0 (glacier).\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes.\nThis is release 1.82.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglacier\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[call creds] Add support for looking up and attaching regional access boundary policy metadata. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41594\"\u003e#41594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnregister CFStream callbacks during endpoint shutdown. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42211\"\u003e#42211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix fd 0 incorrectly treated as invalid across POSIX socket code. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41764\"\u003e#41764\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xDS] enable new ORCA-to-LRS propagation behavior (gRFC A85). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42411\"\u003e#42411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RetryFilter::LegacyCallData]: avoid tripping abseil nullopt assertion. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42405\"\u003e#42405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement A114: WRR support for custom backend metrics. (\u003ca...\n\n_Description has been truncated_","html_url":"https://github.com/wlilley93/boltrig/pull/52","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/wlilley93%2Fboltrig/issues/52","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/52/packages"}},{"old_version":"3.29.7","new_version":"3.31.0","update_type":"minor","path":"/backend","pr_created_at":"2026-07-19T00:33:49.000Z","version_change":"3.29.7 → 3.31.0","issue":{"uuid":"4920656165","node_id":"PR_kwDOQedBh87zcBP8","number":651,"state":"open","title":"chore(deps): bump the pip-backend-patch-minor group in /backend with 5 updates","user":"dependabot[bot]","labels":["dependencies","type:chore","area:backend","area:ci"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-19T00:33:49.000Z","updated_at":"2026-07-19T00:34:01.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"pip-backend-patch-minor","update_count":5,"packages":[{"name":"fastapi","old_version":"0.139.0","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"sentry-sdk","old_version":"2.64.0","new_version":"2.66.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"ruff","old_version":"0.15.21","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.7","new_version":"3.31.0","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":"/backend","ecosystem":"pip"},"body":"Bumps the pip-backend-patch-minor group in /backend with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.139.0` | `0.139.2` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.64.0` | `2.66.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.21` | `0.15.22` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.7` | `3.31.0` |\n\nUpdates `fastapi` from 0.139.0 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.139.0...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.64.0 to 2.66.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.66.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(tracing) Promote trace_lifecycle and ignore_spans to top-level options by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6821\"\u003e#6821\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (HTTP clients) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6811\"\u003e#6811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (task queues) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6814\"\u003e#6814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (misc) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6815\"\u003e#6815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (databases) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6808\"\u003e#6808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (web frameworks) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6810\"\u003e#6810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (django) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6809\"\u003e#6809\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(logging) Fix flaky test_logging_captured_warnings by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6824\"\u003e#6824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove flaky no cyclic garbage test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6817\"\u003e#6817\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove Claude permission settings by \u003ca href=\"https://github.com/cleptric\"\u003e\u003ccode\u003e@​cleptric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6806\"\u003e#6806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003enullcontext\u003c/code\u003e to \u003ccode\u003esentry_sdk.utils\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6805\"\u003e#6805\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.65.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eHuey\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6779\"\u003e#6779\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on producer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6778\"\u003e#6778\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(arq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6767\"\u003e#6767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(dramatiq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6776\"\u003e#6776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(rq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6774\"\u003e#6774\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTake first sentry-trace header in case multiple are supplied by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6722\"\u003e#6722\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Avoid \u003ccode\u003eValueError\u003c/code\u003e in async middleware \u003ccode\u003eprocess_*\u003c/code\u003e hooks by \u003ca href=\"https://github.com/r0ro\"\u003e\u003ccode\u003e@​r0ro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6698\"\u003e#6698\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scope) Drop None user attribute values in set_user by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6692\"\u003e#6692\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Don't overwrite user set during request in AuthenticationMiddleware by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6760\"\u003e#6760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md\"\u003esentry-sdk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.66.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(tracing) Promote trace_lifecycle and ignore_spans to top-level options by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6821\"\u003e#6821\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (HTTP clients) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6811\"\u003e#6811\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (task queues) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6814\"\u003e#6814\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (misc) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6815\"\u003e#6815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (databases) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6808\"\u003e#6808\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (web frameworks) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6810\"\u003e#6810\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip child span creation in streaming path when no current span (django) by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6809\"\u003e#6809\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(logging) Fix flaky test_logging_captured_warnings by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6824\"\u003e#6824\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove flaky no cyclic garbage test by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6817\"\u003e#6817\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove Claude permission settings by \u003ca href=\"https://github.com/cleptric\"\u003e\u003ccode\u003e@​cleptric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6806\"\u003e#6806\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMove \u003ccode\u003enullcontext\u003c/code\u003e to \u003ccode\u003esentry_sdk.utils\u003c/code\u003e by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6805\"\u003e#6805\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.65.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003ch4\u003eHuey\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6779\"\u003e#6779\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSet \u003ccode\u003emessaging.destination.name\u003c/code\u003e on producer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6778\"\u003e#6778\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(arq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6767\"\u003e#6767\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(dramatiq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6776\"\u003e#6776\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(rq) Set \u003ccode\u003emessaging.destination.name\u003c/code\u003e on consumer spans by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6774\"\u003e#6774\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eTracing\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eTake first sentry-trace header in case multiple are supplied by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6722\"\u003e#6722\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(django) Avoid \u003ccode\u003eValueError\u003c/code\u003e in async middleware \u003ccode\u003eprocess_*\u003c/code\u003e hooks by \u003ca href=\"https://github.com/r0ro\"\u003e\u003ccode\u003e@​r0ro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6698\"\u003e#6698\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(scope) Drop None user attribute values in set_user by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6692\"\u003e#6692\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Don't overwrite user set during request in AuthenticationMiddleware by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6760\"\u003e#6760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5179f60b025693f381d6d93cd69817f32931825b\"\u003e\u003ccode\u003e5179f60\u003c/code\u003e\u003c/a\u003e update changelog with docs link\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e4bcb59e5a87772b1a9dee6189889a2dcee8d776\"\u003e\u003ccode\u003ee4bcb59\u003c/code\u003e\u003c/a\u003e release: 2.66.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5ba869c03908edde69b2c6526bdd5f03a37bfef4\"\u003e\u003ccode\u003e5ba869c\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/efddaab9211769982e0c1874e2fb77b0db88b4cd\"\u003e\u003ccode\u003eefddaab\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/b199a9eea34d7107d81714ca2d1c759f3a6e7e0e\"\u003e\u003ccode\u003eb199a9e\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/d695a6eb6ab6a81251d1abec12b61456b786a566\"\u003e\u003ccode\u003ed695a6e\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/dbf5d03f30d97cffd12116e09a34df7b4c2fdafe\"\u003e\u003ccode\u003edbf5d03\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/5c1403440a25999f7d6ce69fcb106205be0b8322\"\u003e\u003ccode\u003e5c14034\u003c/code\u003e\u003c/a\u003e fix(tracing): Skip child span creation in streaming path when no current span...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/e0d2c4a4c5e01452865d06d4cdcafb5823fef164\"\u003e\u003ccode\u003ee0d2c4a\u003c/code\u003e\u003c/a\u003e feat(tracing): Promote trace_lifecycle and ignore_spans to top-level options ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/getsentry/sentry-python/commit/baa423fa766a5ba990ad27b1d3b1231f4b265182\"\u003e\u003ccode\u003ebaa423f\u003c/code\u003e\u003c/a\u003e test(logging): Fix flaky test_logging_captured_warnings (\u003ca href=\"https://redirect.github.com/getsentry/sentry-python/issues/6824\"\u003e#6824\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/getsentry/sentry-python/compare/2.64.0...2.66.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.21 to 0.15.22\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ruff 0.15.22\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003e\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.22\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-16.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Add an autofix for \u003ccode\u003eE402\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/22212\"\u003e#22212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003erefurb\u003c/code\u003e] Allow subclassing builtins in stub files (\u003ccode\u003eFURB189\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26812\"\u003e#26812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to replace \u003ccode\u003enoqa\u003c/code\u003e comments with \u003ccode\u003eruff:ignore\u003c/code\u003e (\u003ccode\u003eRUF105\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26423\"\u003e#26423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ccode\u003eRUF106\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26682\"\u003e#26682\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Add rule to use human-readable names in configuration selectors (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Ignore mutable type updates in \u003ccode\u003eredefined-loop-name\u003c/code\u003e (\u003ccode\u003ePLW2901\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25733\"\u003e#25733\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid redundant lexer token bookkeeping (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26765\"\u003e#26765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid redundant pending-indentation writes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26774\"\u003e#26774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid unnecessary identifier lookahead (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26525\"\u003e#26525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReuse parser scratch buffers (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26798\"\u003e#26798\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-datetimez\u003c/code\u003e] Clarify naming guidance for \u003ccode\u003edatetime.today\u003c/code\u003e (\u003ccode\u003eDTZ002\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26658\"\u003e#26658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Clarify intentional async contexts for \u003ccode\u003eunused-async\u003c/code\u003e (\u003ccode\u003eRUF029\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26641\"\u003e#26641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dwego\"\u003e\u003ccode\u003e@​dwego\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Joosboy\"\u003e\u003ccode\u003e@​Joosboy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KaufmanDmitriy\"\u003e\u003ccode\u003e@​KaufmanDmitriy\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PeterJCLaw\"\u003e\u003ccode\u003e@​PeterJCLaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ntBre\"\u003e\u003ccode\u003e@​ntBre\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0177a7e0d2c4a3805afa1960f106d72878766cbc\"\u003e\u003ccode\u003e0177a7e\u003c/code\u003e\u003c/a\u003e Bump 0.15.22 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26884\"\u003e#26884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fe8ba85a55b76d838e6058d813b64468b5f81eca\"\u003e\u003ccode\u003efe8ba85\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003epycodestyle\u003c/code\u003e] Document \u003ccode\u003eE731\u003c/code\u003e fix safety (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26847\"\u003e#26847\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f3cf7c81fa35f8b819a719303bf1789714f1c780\"\u003e\u003ccode\u003ef3cf7c8\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eruff\u003c/code\u003e] Add \u003ccode\u003erule-codes-in-selectors\u003c/code\u003e (\u003ccode\u003eRUF201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26772\"\u003e#26772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d244fd75e9036e61be4896b823fe760d7aa632a3\"\u003e\u003ccode\u003ed244fd7\u003c/code\u003e\u003c/a\u003e Document argfile support (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26803\"\u003e#26803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f23975849a0db64a2851029c68fc054799d5e7da\"\u003e\u003ccode\u003ef239758\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Fix false positive in \u003ccode\u003e__all__\u003c/code\u003e (\u003ccode\u003ePYI053\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26872\"\u003e#26872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/54acbcde56d76bc47b0b3dfe61e57fbaadd2c06b\"\u003e\u003ccode\u003e54acbcd\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eTypeVarTuple\u003c/code\u003e and \u003ccode\u003eUnpack\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25240\"\u003e#25240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/87fc38cacd7e2bd906674c6dc5b8be97aa3a5bc3\"\u003e\u003ccode\u003e87fc38c\u003c/code\u003e\u003c/a\u003e [ty] Parallelize subtype hierarchy search (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26875\"\u003e#26875\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e454f91fa63bd745d874ead751ad15d9f521195a\"\u003e\u003ccode\u003ee454f91\u003c/code\u003e\u003c/a\u003e [ty] Share interned query keys across Salsa queries (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26794\"\u003e#26794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f361a74a232ad283cc6e5e5d3a62109802aab65\"\u003e\u003ccode\u003e6f361a7\u003c/code\u003e\u003c/a\u003e [ty] only collect expected types for files open in the editor (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25546\"\u003e#25546\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6d6b2b37686da8b1ee56e54fd99831f1f5fa0381\"\u003e\u003ccode\u003e6d6b2b3\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocations during Salsa interned lookups (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26877\"\u003e#26877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/releases\"\u003ecoverage's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.15.2\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically increased memory use during reporting for large projects. Now we use a different approach that is both faster and slimmer than 7.15.0. Fixes \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003eissue 2229\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.2\"\u003ecoverage 7.15.2\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.2\u003c/code\u003e\u003c/p\u003e\n\u003ch2\u003e7.15.1\u003c/h2\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label containing \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could close the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup. Context labels are now fully escaped. Thanks, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003eRajath Mohare\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003e2213\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003e2214\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003e2215\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003e2216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003e2218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003e2220\u003c/a\u003e, and \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003e2221\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e:arrow_right:  PyPI page: \u003ca href=\"https://pypi.org/project/coverage/7.15.1\"\u003ecoverage 7.15.1\u003c/a\u003e.\n:arrow_right:  To install: \u003ccode\u003epython3 -m pip install coverage==7.15.1\u003c/code\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.2 — 2026-07-15\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix: one of the performance improvements in 7.15.1 (pull 2215) dramatically\nincreased memory use during reporting for large projects. Now we use a\ndifferent approach that is both faster and slimmer than 7.15.0. Fixes \u003ccode\u003eissue 2229\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2229:  \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003ecoveragepy/coveragepy#2229\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-1:\u003c/p\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/50d865908dfeb21a0bf1e6f05db578c11662f8dd\"\u003e\u003ccode\u003e50d8659\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b5eed20618cfae07b35328b09dab388e9900f409\"\u003e\u003ccode\u003eb5eed20\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/78cab6e1770e55951c84a78d80b90c60ccfba4d5\"\u003e\u003ccode\u003e78cab6e\u003c/code\u003e\u003c/a\u003e fix: reduce memory use during reporting. \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2229\"\u003e#2229\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2231\"\u003e#2231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/b4c1fda244a04caaa940ae77dd476a8bedfbf38e\"\u003e\u003ccode\u003eb4c1fda\u003c/code\u003e\u003c/a\u003e build: bump version to 7.15.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/182b010b63a2661c86df1ca3b3f84ce8511ee435\"\u003e\u003ccode\u003e182b010\u003c/code\u003e\u003c/a\u003e perf: resolve sysmon branch events lazily, one pair at a time (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ee271ee21fdf4c169648ff4ad3e9dd9d163e5e7f\"\u003e\u003ccode\u003eee271ee\u003c/code\u003e\u003c/a\u003e perf: compute multiline maps cheaply in the sysmon core (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1441b960c698d591d3a22a2190635039320459de\"\u003e\u003ccode\u003e1441b96\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 6 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2225\"\u003e#2225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/dd806350de678c9e4f137ffdda5cb131d269019c\"\u003e\u003ccode\u003edd80635\u003c/code\u003e\u003c/a\u003e fix: escape context labels in html report inline script block (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2224\"\u003e#2224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.7 to 3.31.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.31.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(platform): support Termux/Android by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/678\"\u003etox-dev/filelock#678\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.3...3.31.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/673\"\u003etox-dev/filelock#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e📝 docs(mermaid): follow the light and dark theme toggle by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/674\"\u003etox-dev/filelock#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003easyncio: scope the reentrant-deadlock registry to the owning task by \u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/xt-yin\"\u003e\u003ccode\u003e@​xt-yin\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/676\"\u003etox-dev/filelock#676\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.2...3.30.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocument every lock type, and stop evicting a marker we cannot read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/672\"\u003etox-dev/filelock#672\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.1...3.30.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.1...3.30.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e📝 docs: separate changelog releases with a blank line by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/668\"\u003etox-dev/filelock#668\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix: tolerate NFSv3 stale handle in strict claim read by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/669\"\u003etox-dev/filelock#669\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMatch fork-reset protocol on the class object by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/671\"\u003etox-dev/filelock#671\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ereject non-finite lease duration in marker records by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/670\"\u003etox-dev/filelock#670\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.30.0...3.30.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.30.0...3.30.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.30.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🎨 style: readability cleanup across the library by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/598\"\u003etox-dev/filelock#598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(api): ignore lifetime on native OS locks by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/593\"\u003etox-dev/filelock#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(unix): don't mutate lock file before acquiring flock by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/594\"\u003etox-dev/filelock#594\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.0 (2026-07-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Termux/Android, whose CPython ships without \u003ccode\u003eos.link\u003c/code\u003e and reports \u003ccode\u003esys.platform == \u0026quot;android\u0026quot;\u003c/code\u003e. \u003ccode\u003eimport filelock\u003c/code\u003e and both \u003ccode\u003eFileLock\u003c/code\u003e and \u003ccode\u003eSoftFileLock\u003c/code\u003e now work there, \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e reports its missing\nhard-link support only when acquired, and process liveness reads \u003ccode\u003e/proc\u003c/code\u003e on Android instead of PID-only checks. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e no longer lets two processes hold the lock at once under heavy contention. A holder now keeps\nits intent claim for the whole hold, so a contender whose directory scan races the holder's freshly linked claim can no\nlonger miss it and win alongside it. A held lock now exposes both an \u003ccode\u003eintent\u003c/code\u003e and a \u003ccode\u003eheld\u003c/code\u003e claim. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.3 (2026-07-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eAsyncFileLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLock\u003c/code\u003e no longer raise a deadlock \u003ccode\u003eRuntimeError\u003c/code\u003e when a different asyncio task\nwaits for a lock they hold; the check now scopes holders to the owning task, so only a same-task reacquire is refused. :pr:\u003ccode\u003e676\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size. The widened body column sized itself in \u003ccode\u003eem\u003c/code\u003e against the reader's font size while the breakpoints that fold the layout resolve \u003ccode\u003eem\u003c/code\u003e against a fixed 16px, so a reader whose default font is larger than 16px had the right-hand table of contents clipped off the edge. The body column now flexes instead, and the right-hand table of contents hides only at the mobile breakpoint. :pr:\u003ccode\u003e673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eColor the mermaid diagrams from whichever theme is active. They previously carried a light palette baked into each\ndiagram's source, which stayed light on a dark page. :pr:\u003ccode\u003e674\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.2 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.SoftFileLease\u003c/code\u003e deleting a live marker whose \u003ccode\u003emode\u003c/code\u003e it does not implement. An unrecognized mode now names its owner instead of reading as malformed, so a record written by a newer filelock survives the grace window rather than being evicted after two seconds. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e and :class:\u003ccode\u003e~filelock.AsyncStrictSoftFileLock\u003c/code\u003e calling themselves a native OS lock when they warn that they ignore \u003ccode\u003elifetime\u003c/code\u003e; they now say a strict claim is only ever cleared by \u003ccode\u003eforce_break()\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCover every lock type in the tutorials and how-to guides, with examples drawn from projects that use filelock, and color the mermaid diagrams.\nCorrect the claims that \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e exposes \u003ccode\u003eowner\u003c/code\u003e, that :class:\u003ccode\u003e~filelock.SoftFileLock\u003c/code\u003e evicts a strict sentinel, that :class:\u003ccode\u003e~filelock.ReadWriteLock\u003c/code\u003e requires a \u003ccode\u003e.db\u003c/code\u003e extension, and that every log record is \u003ccode\u003eDEBUG\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.1 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e and \u003ccode\u003eAsyncStrictSoftFileLock\u003c/code\u003e no longer abort acquisition when a peer's claim vanishes as an\nNFSv3 stale filehandle instead of a clean removal; the reader revalidates and skips it, so strict locks hold mutual\nexclusion across independent NFSv3 client caches. :pr:\u003ccode\u003e669\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e reads a marker whose lease duration is \u003ccode\u003enan\u003c/code\u003e or \u003ccode\u003einf\u003c/code\u003e as malformed rather than as a valid lease,\nso such a marker ages out through the grace window instead of raising \u003ccode\u003eLeaseSettingsMismatch\u003c/code\u003e on every contender. :pr:\u003ccode\u003e670\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.0 (2026-07-16)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3b66fdc1432e3b02e83525e61a99096aa09a933f\"\u003e\u003ccode\u003e3b66fdc\u003c/code\u003e\u003c/a\u003e Release 3.31.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/166b2b5d723a2e111be36a8b43e594a97141c0fd\"\u003e\u003ccode\u003e166b2b5\u003c/code\u003e\u003c/a\u003e ✨ feat(platform): support Termux/Android (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/678\"\u003e#678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/51bca89704e83ea6bed8462946c72835544dbc8f\"\u003e\u003ccode\u003e51bca89\u003c/code\u003e\u003c/a\u003e Release 3.30.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/fc277001fb6abaea57986dc52d9844d48a9ef2f6\"\u003e\u003ccode\u003efc27700\u003c/code\u003e\u003c/a\u003e asyncio: scope the reentrant-deadlock registry to the owning task (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/676\"\u003e#676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8699861c86445e3a46ac185dc206a44183cd681a\"\u003e\u003ccode\u003e8699861\u003c/code\u003e\u003c/a\u003e 📝 docs(mermaid): follow the light and dark theme toggle (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1b8da43740e2484fd3c84009e4693213fe6d5300\"\u003e\u003ccode\u003e1b8da43\u003c/code\u003e\u003c/a\u003e Keep both tables of contents on screen at any browser font size (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9a71d061458d18742be9c55170dd4465f8edf1c7\"\u003e\u003ccode\u003e9a71d06\u003c/code\u003e\u003c/a\u003e Release 3.30.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0dfa1b20fb9d85051e3304d3674787bea297b2d1\"\u003e\u003ccode\u003e0dfa1b2\u003c/code\u003e\u003c/a\u003e Document every lock type, and stop evicting a marker we cannot read (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/47d435f9458a70da803001ebbd424ca03f1afe41\"\u003e\u003ccode\u003e47d435f\u003c/code\u003e\u003c/a\u003e Release 3.30.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/9b7b3b14027a385f8c636b7ee2ecfd3d052bdca0\"\u003e\u003ccode\u003e9b7b3b1\u003c/code\u003e\u003c/a\u003e reject non-finite lease duration in marker records (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/670\"\u003e#670\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.7...3.31.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/Prekzursil/momentstudio/pull/651","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Prekzursil%2Fmomentstudio/issues/651","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/651/packages"}},{"old_version":"3.16.1","new_version":"3.20.3","update_type":"minor","path":"/tmrc","pr_created_at":"2026-07-18T23:04:57.000Z","version_change":"3.16.1 → 3.20.3","issue":{"uuid":"4920407261","node_id":"PR_kwDONTiDa87zbQ5B","number":5,"state":"closed","title":"Bump filelock from 3.16.1 to 3.20.3 in /tmrc","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-18T23:13:10.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-18T23:04:57.000Z","updated_at":"2026-07-18T23:13:19.000Z","time_to_close":493,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"filelock","old_version":"3.16.1","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":"/tmrc","ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.16.1 to 3.20.3.\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Unix systems without O_NOFOLLOW by \u003ca href=\"https://github.com/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/464\"\u003etox-dev/filelock#464\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/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\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.20.1...3.20.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.1...3.20.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2025-68146: Fix TOCTOU symlink vulnerability in lock file creation 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/461\"\u003etox-dev/filelock#461\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.20.0...3.20.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.0...3.20.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd tox.toml to sdist by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/436\"\u003etox-dev/filelock#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate docs with example by \u003ca href=\"https://github.com/znichollscr\"\u003e\u003ccode\u003e@​znichollscr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/438\"\u003etox-dev/filelock#438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd 3.14 support and drop 3.9 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/448\"\u003etox-dev/filelock#448\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/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/436\"\u003etox-dev/filelock#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/znichollscr\"\u003e\u003ccode\u003e@​znichollscr\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/438\"\u003etox-dev/filelock#438\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.19.1...3.20.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.19.1...3.20.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.19.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd 3.14t (free threading) to matrix by \u003ca href=\"https://github.com/paultiq\"\u003e\u003ccode\u003e@​paultiq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/433\"\u003etox-dev/filelock#433\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease test coverage by \u003ca href=\"https://github.com/paultiq\"\u003e\u003ccode\u003e@​paultiq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/434\"\u003etox-dev/filelock#434\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003cp\u003e.. towncrier-draft-entries:: Unreleased\u003c/p\u003e\n\u003cp\u003e.. towncrier release notes start\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.31.0 (2026-07-18)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Termux/Android, whose CPython ships without \u003ccode\u003eos.link\u003c/code\u003e and reports \u003ccode\u003esys.platform == \u0026quot;android\u0026quot;\u003c/code\u003e. \u003ccode\u003eimport filelock\u003c/code\u003e and both \u003ccode\u003eFileLock\u003c/code\u003e and \u003ccode\u003eSoftFileLock\u003c/code\u003e now work there, \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e reports its missing\nhard-link support only when acquired, and process liveness reads \u003ccode\u003e/proc\u003c/code\u003e on Android instead of PID-only checks. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e no longer lets two processes hold the lock at once under heavy contention. A holder now keeps\nits intent claim for the whole hold, so a contender whose directory scan races the holder's freshly linked claim can no\nlonger miss it and win alongside it. A held lock now exposes both an \u003ccode\u003eintent\u003c/code\u003e and a \u003ccode\u003eheld\u003c/code\u003e claim. :pr:\u003ccode\u003e678\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.3 (2026-07-17)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eAsyncFileLock\u003c/code\u003e and \u003ccode\u003eAsyncSoftFileLock\u003c/code\u003e no longer raise a deadlock \u003ccode\u003eRuntimeError\u003c/code\u003e when a different asyncio task\nwaits for a lock they hold; the check now scopes holders to the owning task, so only a same-task reacquire is refused. :pr:\u003ccode\u003e676\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eKeep both tables of contents on screen at any browser font size. The widened body column sized itself in \u003ccode\u003eem\u003c/code\u003e against the reader's font size while the breakpoints that fold the layout resolve \u003ccode\u003eem\u003c/code\u003e against a fixed 16px, so a reader whose default font is larger than 16px had the right-hand table of contents clipped off the edge. The body column now flexes instead, and the right-hand table of contents hides only at the mobile breakpoint. :pr:\u003ccode\u003e673\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eColor the mermaid diagrams from whichever theme is active. They previously carried a light palette baked into each\ndiagram's source, which stayed light on a dark page. :pr:\u003ccode\u003e674\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.2 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.SoftFileLease\u003c/code\u003e deleting a live marker whose \u003ccode\u003emode\u003c/code\u003e it does not implement. An unrecognized mode now names its owner instead of reading as malformed, so a record written by a newer filelock survives the grace window rather than being evicted after two seconds. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop :class:\u003ccode\u003e~filelock.StrictSoftFileLock\u003c/code\u003e and :class:\u003ccode\u003e~filelock.AsyncStrictSoftFileLock\u003c/code\u003e calling themselves a native OS lock when they warn that they ignore \u003ccode\u003elifetime\u003c/code\u003e; they now say a strict claim is only ever cleared by \u003ccode\u003eforce_break()\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCover every lock type in the tutorials and how-to guides, with examples drawn from projects that use filelock, and color the mermaid diagrams.\nCorrect the claims that \u003ccode\u003eStrictSoftFileLock\u003c/code\u003e exposes \u003ccode\u003eowner\u003c/code\u003e, that :class:\u003ccode\u003e~filelock.SoftFileLock\u003c/code\u003e evicts a strict sentinel, that :class:\u003ccode\u003e~filelock.ReadWriteLock\u003c/code\u003e requires a \u003ccode\u003e.db\u003c/code\u003e extension, and that every log record is \u003ccode\u003eDEBUG\u003c/code\u003e. :pr:\u003ccode\u003e672\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.1 (2026-07-16)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eStrictSoftFileLock\u003c/code\u003e and \u003ccode\u003eAsyncStrictSoftFileLock\u003c/code\u003e no longer abort acquisition when a peer's claim vanishes as an\nNFSv3 stale filehandle instead of a clean removal; the reader revalidates and skips it, so strict locks hold mutual\nexclusion across independent NFSv3 client caches. :pr:\u003ccode\u003e669\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSoftFileLease\u003c/code\u003e reads a marker whose lease duration is \u003ccode\u003enan\u003c/code\u003e or \u003ccode\u003einf\u003c/code\u003e as malformed rather than as a valid lease,\nso such a marker ages out through the grace window instead of raising \u003ccode\u003eLeaseSettingsMismatch\u003c/code\u003e on every contender. :pr:\u003ccode\u003e670\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.30.0 (2026-07-16)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2e7d4046b6a2b375a573bcfbad21827b99f8939\"\u003e\u003ccode\u003ef2e7d40\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/50888548eb2f008d372e71f2835a47851ab83836\"\u003e\u003ccode\u003e5088854\u003c/code\u003e\u003c/a\u003e Support Unix systems without O_NOFOLLOW (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/377f62251d7cdf30768cc9ee1eb31cea1551c71b\"\u003e\u003ccode\u003e377f622\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/460\"\u003e#460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4724d7f8c3393ec1f048c93933e6e3e6ec321f0e\"\u003e\u003ccode\u003e4724d7f\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in lock file creation (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/461\"\u003e#461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/cb69414a2327cf0a9887e12054d1dc112ee700af\"\u003e\u003ccode\u003ecb69414\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/459\"\u003e#459\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0769294f14a6c62eea64741722f7acef5386b4cd\"\u003e\u003ccode\u003e0769294\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/458\"\u003e#458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/414193a188892bd376eb5c56eb45a9cf8ecc9284\"\u003e\u003ccode\u003e414193a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/457\"\u003e#457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1456797beb94ad59e5627462ad29f7ed3a966626\"\u003e\u003ccode\u003e1456797\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/456\"\u003e#456\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8d6bf90af313ac7fd6e41ef2b715d91dd6858f5c\"\u003e\u003ccode\u003e8d6bf90\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/455\"\u003e#455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.16.1...3.20.3\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.16.1\u0026new-version=3.20.3)](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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/KempnerInstitute/systems-scaling/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/KempnerInstitute/systems-scaling/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/KempnerInstitute%2Fsystems-scaling/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}},{"old_version":"3.29.5","new_version":"3.29.7","update_type":"patch","path":null,"pr_created_at":"2026-07-14T15:03:23.000Z","version_change":"3.29.5 → 3.29.7","issue":{"uuid":"4884369875","node_id":"PR_kwDOQ6OR-M7xnBGL","number":47,"state":"open","title":"ci: bump the pip-all group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python","ai-contributed","ai-failed"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-14T15:03:23.000Z","updated_at":"2026-07-14T15:24:04.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"ci: bump","group_name":"pip-all","update_count":20,"packages":[{"name":"ultralytics","old_version":"8.4.89","new_version":"8.4.95","repository_url":"https://github.com/ultralytics/ultralytics"},{"name":"tqdm","old_version":"4.68.3","new_version":"4.68.4","repository_url":"https://github.com/tqdm/tqdm"},{"name":"boto3","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/boto/boto3"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"boto3-stubs","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"botocore","old_version":"1.43.40","new_version":"1.43.47","repository_url":"https://github.com/boto/botocore"},{"name":"build","old_version":"1.5.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"cuda-pathfinder","old_version":"1.5.5","new_version":"1.5.6","repository_url":"https://github.com/NVIDIA/cuda-python"},{"name":"filelock","old_version":"3.29.5","new_version":"3.29.7","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"grpcio","old_version":"1.82.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"librt","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/mypyc/librt"},{"name":"mypy-boto3-ec2","old_version":"1.43.39","new_version":"1.43.46","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"mypy-boto3-lambda","old_version":"1.43.37","new_version":"1.43.47","repository_url":"https://github.com/youtype/mypy_boto3_builder"},{"name":"narwhals","old_version":"2.23.0","new_version":"2.24.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"s3transfer","old_version":"0.19.0","new_version":"0.19.1","repository_url":"https://github.com/boto/s3transfer"},{"name":"types-requests","old_version":"2.33.0.20260518","new_version":"2.33.0.20260712","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip-all group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ultralytics](https://github.com/ultralytics/ultralytics) | `8.4.89` | `8.4.95` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.3` | `4.68.4` |\n| [boto3](https://github.com/boto/boto3) | `1.43.40` | `1.43.47` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.15.21` |\n| [boto3-stubs](https://github.com/youtype/mypy_boto3_builder) | `1.43.40` | `1.43.47` |\n| [botocore](https://github.com/boto/botocore) | `1.43.40` | `1.43.47` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.5.1` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.1` |\n| [cuda-pathfinder](https://github.com/NVIDIA/cuda-python) | `1.5.5` | `1.5.6` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.5` | `3.29.7` |\n| [grpcio](https://github.com/grpc/grpc) | `1.82.0` | `1.82.1` |\n| [librt](https://github.com/mypyc/librt) | `0.12.0` | `0.13.0` |\n| [mypy-boto3-ec2](https://github.com/youtype/mypy_boto3_builder) | `1.43.39` | `1.43.46` |\n| [mypy-boto3-lambda](https://github.com/youtype/mypy_boto3_builder) | `1.43.37` | `1.43.47` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.23.0` | `2.24.0` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.19.0` | `0.19.1` |\n| [types-requests](https://github.com/python/typeshed) | `2.33.0.20260518` | `2.33.0.20260712` |\n\n\nUpdates `ultralytics` from 8.4.89 to 8.4.95\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/ultralytics/ultralytics/releases\"\u003eultralytics's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.4.95 - Fix restricted loading of training checkpoints (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/h2\u003e\n\u003ch2\u003e🌟 Summary\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003ev8.4.95 improves training reliability, RT-DETR detection limits, input compatibility, and dataset usability—headlined by safer checkpoint loading for Platform GPU jobs.\u003c/strong\u003e 🚀\u003c/p\u003e\n\u003ch2\u003e📊 Key Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e🔒 Fixed restricted training checkpoint loading\u003c/strong\u003e — Raw checkpoints produced by Platform GPU workers no longer include training-only loss objects or NumPy scalar metadata that can be rejected by secure \u003ccode\u003eweights_only=True\u003c/code\u003e loading.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🎯 Improved RT-DETR \u003ccode\u003emax_det\u003c/code\u003e support\u003c/strong\u003e — The detection limit is now correctly applied during native prediction, validation, and model exports, including CoreML and other deployment formats.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🖼️ Expanded NumPy input compatibility\u003c/strong\u003e — NumPy images with grayscale, gray-plus-alpha, BGR, or BGRA channels are now normalized to match the model’s expected channel count.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🔢 Fixed uint8 tensor preprocessing\u003c/strong\u003e — Integer image tensors are handled without invalid floating-point dtype operations, while existing floating-point normalization behavior is preserved.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📦 Reduced automatic COCO downloads\u003c/strong\u003e — COCO detection, segmentation, and pose datasets no longer download the optional 7 GB \u003ccode\u003etest2017.zip\u003c/code\u003e by default. Standard downloads are now approximately 20.2–20.3 GB instead of about 27 GB.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🧪 Made segmentation conversion deterministic\u003c/strong\u003e — Mask files are processed in sorted filename order, improving repeatability across runs.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📈 Corrected pose metric curve labels\u003c/strong\u003e — Removed duplicate box labels so pose metrics align correctly with dashboards such as Weights \u0026amp; Biases.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📝 Clarified prediction and embedding return types\u003c/strong\u003e — Documentation and type hints now accurately indicate that streaming returns an iterator, while non-streaming calls return lists.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e🛠️ Simplified edge-case handling\u003c/strong\u003e — Empty segmentation inputs now return a valid zero box immediately.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e📚 Updated examples and training documentation\u003c/strong\u003e — The \u003ccode\u003eObjectCounter\u003c/code\u003e example now uses its returned results object, and automatic dataset download behavior is described more precisely.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🎯 Purpose \u0026amp; Impact\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eMore dependable cloud training:\u003c/strong\u003e Platform GPU workers can save, resume, and load raw training checkpoints more reliably, reducing avoidable job failures. ✅\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMore predictable deployment:\u003c/strong\u003e RT-DETR exports and validation now respect \u003ccode\u003emax_det\u003c/code\u003e, helping control output size, latency, and downstream processing requirements.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFewer input-related errors:\u003c/strong\u003e Applications using NumPy arrays or \u003ccode\u003euint8\u003c/code\u003e tensors can handle a wider range of camera and image formats without manual channel conversion.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFaster, lighter dataset setup:\u003c/strong\u003e Most COCO users save roughly 7 GB of storage and download time because test images without public ground truth are excluded.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMore reproducible data preparation:\u003c/strong\u003e Deterministic mask ordering makes conversion results and debugging more consistent.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eClearer analytics:\u003c/strong\u003e Correct pose labels prevent mislabeled or missing metric panels in experiment tracking tools.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNo major model architecture change:\u003c/strong\u003e This release focuses on reliability, compatibility, export behavior, and documentation rather than introducing a new model family. YOLO26 remains the latest recommended Ultralytics model for general use. 🌟\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eStop coco.yaml and coco-pose.yaml from downloading test2017.zip by default by \u003ca href=\"https://github.com/raimbekovm\"\u003e\u003ccode\u003e@​raimbekovm\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25136\"\u003eultralytics/ultralytics#25136\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse ObjectCounter results in the usage example by \u003ca href=\"https://github.com/parthivdholaria\"\u003e\u003ccode\u003e@​parthivdholaria\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23417\"\u003eultralytics/ultralytics#23417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eProcess segmentation masks in deterministic order by \u003ca href=\"https://github.com/AlexRTer\"\u003e\u003ccode\u003e@​AlexRTer\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24390\"\u003eultralytics/ultralytics#24390\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSimplify empty segment handling in segment2box by \u003ca href=\"https://github.com/1548093028\"\u003e\u003ccode\u003e@​1548093028\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23770\"\u003eultralytics/ultralytics#23770\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize uint8 tensor sources without dtype errors by \u003ca href=\"https://github.com/jahsef\"\u003e\u003ccode\u003e@​jahsef\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23743\"\u003eultralytics/ultralytics#23743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify automatic dataset downloads in training docs by \u003ca href=\"https://github.com/vedantparnaik\"\u003e\u003ccode\u003e@​vedantparnaik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24155\"\u003eultralytics/ultralytics#24155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify streamed prediction return types by \u003ca href=\"https://github.com/thiliapr\"\u003e\u003ccode\u003e@​thiliapr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24391\"\u003eultralytics/ultralytics#24391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify streamed embedding return types by \u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24134\"\u003eultralytics/ultralytics#24134\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePoseMetrics.curves\u003c/code\u003e returning duplicated box labels by \u003ca href=\"https://github.com/JESUSROYETH\"\u003e\u003ccode\u003e@​JESUSROYETH\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25148\"\u003eultralytics/ultralytics#25148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNormalize NumPy channel count to the model in \u003ccode\u003eLoadPilAndNumpy\u003c/code\u003e by \u003ca href=\"https://github.com/JESUSROYETH\"\u003e\u003ccode\u003e@​JESUSROYETH\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25151\"\u003eultralytics/ultralytics#25151\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(rtdetr): honor max_det in decoder exports and validation by \u003ca href=\"https://github.com/Hasnaathussain\"\u003e\u003ccode\u003e@​Hasnaathussain\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25153\"\u003eultralytics/ultralytics#25153\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix restricted loading of training checkpoints by \u003ca href=\"https://github.com/glenn-jocher\"\u003e\u003ccode\u003e@​glenn-jocher\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/25154\"\u003eultralytics/ultralytics#25154\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thiliapr\"\u003e\u003ccode\u003e@​thiliapr\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24391\"\u003eultralytics/ultralytics#24391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/parthivdholaria\"\u003e\u003ccode\u003e@​parthivdholaria\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23417\"\u003eultralytics/ultralytics#23417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jahsef\"\u003e\u003ccode\u003e@​jahsef\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23743\"\u003eultralytics/ultralytics#23743\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vedantparnaik\"\u003e\u003ccode\u003e@​vedantparnaik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24155\"\u003eultralytics/ultralytics#24155\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/1548093028\"\u003e\u003ccode\u003e@​1548093028\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/23770\"\u003eultralytics/ultralytics#23770\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/AlexRTer\"\u003e\u003ccode\u003e@​AlexRTer\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24390\"\u003eultralytics/ultralytics#24390\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/pull/24134\"\u003eultralytics/ultralytics#24134\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/f5f5d43d0bd2e6dd03e5a073eb3bf9687c7c6e4a\"\u003e\u003ccode\u003ef5f5d43\u003c/code\u003e\u003c/a\u003e Fix restricted loading of training checkpoints (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25154\"\u003e#25154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/cdccf05c7c094d011078d933244b809ef6e970b9\"\u003e\u003ccode\u003ecdccf05\u003c/code\u003e\u003c/a\u003e fix(rtdetr): honor max_det in decoder exports and validation (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25153\"\u003e#25153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/bacd7ccc90148f365ac89547e3e5d0c9c8cf206a\"\u003e\u003ccode\u003ebacd7cc\u003c/code\u003e\u003c/a\u003e Normalize NumPy channel count to the model in \u003ccode\u003eLoadPilAndNumpy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25151\"\u003e#25151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/c1ad93990c48120454eb9b9290fd6ce4743c7072\"\u003e\u003ccode\u003ec1ad939\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003ePoseMetrics.curves\u003c/code\u003e returning duplicated box labels (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/25148\"\u003e#25148\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5e31e316d729b4781be067792fec46929a86ced3\"\u003e\u003ccode\u003e5e31e31\u003c/code\u003e\u003c/a\u003e Clarify streamed embedding return types (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24134\"\u003e#24134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/4fbd0882c88c25430a7c4bc23f69b92b294787ab\"\u003e\u003ccode\u003e4fbd088\u003c/code\u003e\u003c/a\u003e Clarify streamed prediction return types (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24391\"\u003e#24391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5eb325fa86a00faa3261f0e1530d8161d22ada15\"\u003e\u003ccode\u003e5eb325f\u003c/code\u003e\u003c/a\u003e Clarify automatic dataset downloads in training docs (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24155\"\u003e#24155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/71ca45a7b5d1e21d3416ce7e646200af4af41c8f\"\u003e\u003ccode\u003e71ca45a\u003c/code\u003e\u003c/a\u003e Normalize uint8 tensor sources without dtype errors (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/23743\"\u003e#23743\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/6754b6ecd5f3aa2d435db3c0bd9b0b9d24501f49\"\u003e\u003ccode\u003e6754b6e\u003c/code\u003e\u003c/a\u003e Simplify empty segment handling in segment2box (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/23770\"\u003e#23770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ultralytics/ultralytics/commit/5acbce655cb6981759c1847c0c95d1a9be18ecd8\"\u003e\u003ccode\u003e5acbce6\u003c/code\u003e\u003c/a\u003e Process segmentation masks in deterministic order (\u003ca href=\"https://redirect.github.com/ultralytics/ultralytics/issues/24390\"\u003e#24390\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ultralytics/ultralytics/compare/v8.4.89...v8.4.95\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tqdm` from 4.68.3 to 4.68.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tqdm/tqdm/releases\"\u003etqdm's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003etqdm v4.68.4 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003etrim to \u003ccode\u003encols\u003c/code\u003e even when \u003ccode\u003e'{bar}' not in bar_format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003etqdm.write\u003c/code\u003e when \u003ccode\u003estdout=None\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/53d096e77c28005b4f9fe1e9d6274ae311bf87e7\"\u003e\u003ccode\u003e53d096e\u003c/code\u003e\u003c/a\u003e bump version, merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1768\"\u003e#1768\u003c/a\u003e from its-Sohan/fix/write-stdout-none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/74ff9929dfec128972eb68f9ff27ae40fae6a21c\"\u003e\u003ccode\u003e74ff992\u003c/code\u003e\u003c/a\u003e fix: prevent tqdm.write from crashing when sys.stdout is none\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/3757d0d13ec86d73a838b55fc35ef89bc42a3461\"\u003e\u003ccode\u003e3757d0d\u003c/code\u003e\u003c/a\u003e Merge pull requests \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1717\"\u003e#1717\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1767\"\u003e#1767\u003c/a\u003e (fixes \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/55156ce4bed3457956d0557558b9bfb1c2de8a33\"\u003e\u003ccode\u003e55156ce\u003c/code\u003e\u003c/a\u003e fix: apply disp_trim to all format_meter return paths (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1658\"\u003e#1658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tqdm/tqdm/compare/v4.68.3...v4.68.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/11b997885803acb3a479c94338dcacbcfc107c64\"\u003e\u003ccode\u003e11b9978\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.47'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2a7cd54ca2b92b57deab9127ad73f11a162e634c\"\u003e\u003ccode\u003e2a7cd54\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/16f140d9d3b18e9957525c3ec2aa2af883f815d6\"\u003e\u003ccode\u003e16f140d\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/c7888d6ae67b712df9be3462eeacd2c74e9e0c44\"\u003e\u003ccode\u003ec7888d6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/7db70eaaa1f3e68da7a6f590373a13b905c42849\"\u003e\u003ccode\u003e7db70ea\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1479621e3e478cfaa89f3b3327702865f0370968\"\u003e\u003ccode\u003e1479621\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.46\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/54abdb4aba7b980bf2fafd0d4e1043491eb6e63d\"\u003e\u003ccode\u003e54abdb4\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/75de6377d0a23c3468bfd8fc1740000599d73691\"\u003e\u003ccode\u003e75de637\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d3449aa60a089a207491d34f4a6f158bac78de50\"\u003e\u003ccode\u003ed3449aa\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/497253d2edd8f134e3af77d12916b89acb0857ba\"\u003e\u003ccode\u003e497253d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.45\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.40...1.43.47\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch3\u003ePackaging changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer provide mypyc-accelerated wheels for macOS x86_64 [mypyc-wheels \u003ca href=\"https://redirect.github.com/python/mypy/issues/119\"\u003e#119\u003c/a\u003e](\u003ca href=\"https://redirect.github.com/mypyc/mypy_mypyc-wheels/pull/119\"\u003emypyc/mypy_mypyc-wheels#119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3-stubs` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/youtype/mypy_boto3_builder/releases\"\u003eboto3-stubs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.8.0 - Python 3.8 runtime is back\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e \u003ccode\u003einstall_requires\u003c/code\u003e section is calculated based on dependencies in use, so \u003ccode\u003etyping-extensions\u003c/code\u003e version is set properly\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Replaced \u003ccode\u003etyping\u003c/code\u003e imports with \u003ccode\u003ecollections.abc\u003c/code\u003e with a fallback to \u003ccode\u003etyping\u003c/code\u003e for Python \u0026lt;3.9\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Added aliases for \u003ccode\u003ebuiltins.list\u003c/code\u003e, \u003ccode\u003ebuiltins.set\u003c/code\u003e, \u003ccode\u003ebuiltins.dict\u003c/code\u003e, and \u003ccode\u003ebuiltins.type\u003c/code\u003e, so Python 3.8 runtime should work as expected again (reported by \u003ca href=\"https://github.com/YHallouard\"\u003e\u003ccode\u003e@​YHallouard\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/youtype/mypy_boto3_builder/issues/340\"\u003e#340\u003c/a\u003e and \u003ca href=\"https://github.com/Omri-Ben-Yair\"\u003e\u003ccode\u003e@​Omri-Ben-Yair\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/youtype/mypy_boto3_builder/issues/336\"\u003e#336\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[all]\u003c/code\u003e Unions use the same type annotations as the rest of the structures due to proper fallbacks\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e Universal input/output shapes were not replaced properly in service subresources\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[docs]\u003c/code\u003e Simplified doc links rendering for services\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[services]\u003c/code\u003e Cleaned up unnecessary imports in \u003ccode\u003eclient.pyi\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[builder]\u003c/code\u003e Import records with fallback are always rendered\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/youtype/mypy_boto3_builder/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.43.40 to 1.43.47\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/d5dccf3a48f775e729a550d81b4fe97d483ce2d7\"\u003e\u003ccode\u003ed5dccf3\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.47'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c4c3d0390f16ab46a67a072f94848deb0ac5bdac\"\u003e\u003ccode\u003ec4c3d03\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e8a69b4d1a7500ed3d8b623939ad8f7fb7bd9b92\"\u003e\u003ccode\u003ee8a69b4\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eefc25b1761c84e1e7e3fa237750daa79d7afbc6\"\u003e\u003ccode\u003eeefc25b\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/4249fcd7341f5d0168b038ce9ab30f98b1232c4e\"\u003e\u003ccode\u003e4249fcd\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/dbc7a739c17fac3a6d01d0e7b7e11b9faae4b580\"\u003e\u003ccode\u003edbc7a73\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.46' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/089203a13a3117eabaf8ca1f963b9665564888bf\"\u003e\u003ccode\u003e089203a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.46\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/601925e542e1cd3fcf2a861cbc0d1c0dbfacd92e\"\u003e\u003ccode\u003e601925e\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7831fa13c52d69b9f1caf2a85b0ef20dffa66ddf\"\u003e\u003ccode\u003e7831fa1\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/af6622c7a0c7d583fae766f96809ab856ce91a85\"\u003e\u003ccode\u003eaf6622c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.45'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.40...1.43.47\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.5.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: secure GitHub Actions workflows by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1068\"\u003epypa/build#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings forwarding in build_package and build_package_via_sdist by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1058\"\u003epypa/build#1058\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump virtualenv from 20.17 to 20.36.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1076\"\u003epypa/build#1076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump wheel from 0.36.0 to 0.38.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1075\"\u003epypa/build#1075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump pip from 22.3 to 26.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1074\"\u003epypa/build#1074\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: enforce lazy imports with flake8-lazy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1088\"\u003epypa/build#1088\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(deps): show wanted vs found in missing-deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1082\"\u003epypa/build#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: align action pin version comments by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1091\"\u003epypa/build#1091\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update isolated env example to use DefaultIsolatedEnv by \u003ca href=\"https://github.com/shenxianpeng\"\u003e\u003ccode\u003e@​shenxianpeng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1090\"\u003epypa/build#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: compact test_parse_args with a typed make_kwargs helper by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1092\"\u003epypa/build#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(typing): ban explicit Any across src and tests by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1093\"\u003epypa/build#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): warn on valueless config settings by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1081\"\u003epypa/build#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): add --sdist-extract-dir to reuse compiler caches by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1085\"\u003epypa/build#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⚠️ feat(util): deprecate project_wheel_metadata by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1084\"\u003epypa/build#1084\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump pre-commit tags by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1095\"\u003epypa/build#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat: report resolved build dependency versions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1086\"\u003epypa/build#1086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(env): control the isolated build environment location by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1083\"\u003epypa/build#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): machine-readable build report, and metadata from a wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1080\"\u003epypa/build#1080\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): drain verbose subprocess output without a worker thread by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1098\"\u003epypa/build#1098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(cli): minor cleanups in builder and CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1099\"\u003epypa/build#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): reject a file as --env-dir and drop a mutable default by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1100\"\u003epypa/build#1100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add classifier for 3.15 (testing on beta already) by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1104\"\u003epypa/build#1104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add lockfiles to gitignore by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1101\"\u003epypa/build#1101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add check-dist by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1103\"\u003epypa/build#1103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): surface debug paths when a backend build fails by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1087\"\u003epypa/build#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: shorten changelog entries to concise highlights by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1105\"\u003epypa/build#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): raise dependency floors to 3.10 minimums and drop pytest cap by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1107\"\u003epypa/build#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump mypy, restrict pytest 9.1.0 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1108\"\u003epypa/build#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(cli): fix CLI warnings being written to stdout instead of stderr by \u003ca href=\"https://github.com/ymyzk\"\u003e\u003ccode\u003e@​ymyzk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1111\"\u003epypa/build#1111\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump vulnerable dependency floors (virtualenv, wheel) by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1113\"\u003epypa/build#1113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: default --installer to pip in argparse by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1117\"\u003epypa/build#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: build correct dest path in Windows symlink support probe by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1118\"\u003epypa/build#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: derive dist-info directory from wheel contents, not filename by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1119\"\u003epypa/build#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use LF instead of os.linesep when writing pip/uv requirements files by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1120\"\u003epypa/build#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: decide color support per output stream, not solely from stdout by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1123\"\u003epypa/build#1123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: open the wheel only once in metadata_path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1126\"\u003epypa/build#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: minor robustness fixes from code review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1121\"\u003epypa/build#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: simplify code paths found in review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1124\"\u003epypa/build#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: memoize check_dependency by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1122\"\u003epypa/build#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: isolate color tests from NO_COLOR and FORCE_COLOR by \u003ca href=\"https://github.com/Yearnzq\"\u003e\u003ccode\u003e@​Yearnzq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1128\"\u003epypa/build#1128\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.5.1 (2026-07-09)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache\nreuse across rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds\n\u003cul\u003e\n\u003cli\u003eby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the\n\u0026quot;Debug a failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e\n(:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the\ndestination path - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e\nline endings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDeprecations and Removals\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate :func:\u003ccode\u003ebuild.util.project_wheel_metadata\u003c/code\u003e; use \u003ccode\u003epython -m build --metadata\u003c/code\u003e instead - by\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/d08fcd723500a7d676867144e1e7a22b650aeb7d\"\u003e\u003ccode\u003ed08fcd7\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/135801c502a7b36e25628d7c3ea9042fe8afa138\"\u003e\u003ccode\u003e135801c\u003c/code\u003e\u003c/a\u003e test: isolate color tests from NO_COLOR and FORCE_COLOR (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/820d4e5638eda9aa744528ab6b9a0e4be98d7d41\"\u003e\u003ccode\u003e820d4e5\u003c/code\u003e\u003c/a\u003e perf: memoize check_dependency (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/6c03264d186ce7a6c9f1e1990408a3a215dc7610\"\u003e\u003ccode\u003e6c03264\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/43c337a6bf55cbf2737bf938f3968be46ebc48b7\"\u003e\u003ccode\u003e43c337a\u003c/code\u003e\u003c/a\u003e refactor: simplify code paths found in review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1124\"\u003e#1124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/260ae22ee29fbca9b452a1b44cf3aacd09bb9250\"\u003e\u003ccode\u003e260ae22\u003c/code\u003e\u003c/a\u003e fix: minor robustness fixes from code review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/100e86e5e4f99167416b1d98783fc095223e0b8f\"\u003e\u003ccode\u003e100e86e\u003c/code\u003e\u003c/a\u003e refactor: open the wheel only once in metadata_path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/272db6ce3474299b763674550ba0075954177ed3\"\u003e\u003ccode\u003e272db6c\u003c/code\u003e\u003c/a\u003e fix: decide color support per output stream, not solely from stdout (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1123\"\u003e#1123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/bc4ca7c7cb2033d7fecbfe82f8b3d7df7376572f\"\u003e\u003ccode\u003ebc4ca7c\u003c/code\u003e\u003c/a\u003e fix: use LF instead of os.linesep when writing pip/uv requirements files (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/16d8143d9979fc5432b8b1effb1dc3f6048c7840\"\u003e\u003ccode\u003e16d8143\u003c/code\u003e\u003c/a\u003e fix: derive dist-info directory from wheel contents, not filename (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.5.0...1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: ...\n\n_Description has been truncated_","html_url":"https://github.com/rssrn/birdbird/pull/47","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/rssrn%2Fbirdbird/issues/47","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/47/packages"}},{"old_version":"3.29.5","new_version":"3.29.7","update_type":"patch","path":null,"pr_created_at":"2026-07-13T14:42:07.000Z","version_change":"3.29.5 → 3.29.7","issue":{"uuid":"4874721173","node_id":"PR_kwDOK8S49c7xHoEK","number":100,"state":"open","title":":arrow_up: Bump the all group with 8 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-13T14:42:07.000Z","updated_at":"2026-07-13T14:45:23.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":":arrow_up: Bump","group_name":"all","update_count":8,"packages":[{"name":"ruff","old_version":"0.15.20","new_version":"0.15.21","repository_url":"https://github.com/astral-sh/ruff"},{"name":"mypy","old_version":"2.1.0","new_version":"2.3.0","repository_url":"https://github.com/python/mypy"},{"name":"build","old_version":"1.5.0","new_version":"1.5.1","repository_url":"https://github.com/pypa/build"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"coverage","old_version":"7.15.0","new_version":"7.15.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"filelock","old_version":"3.29.5","new_version":"3.29.7","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"librt","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/mypyc/librt"}],"path":null,"ecosystem":"pip"},"body":"Bumps the all group with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.20` | `0.15.21` |\n| [mypy](https://github.com/python/mypy) | `2.1.0` | `2.3.0` |\n| [build](https://github.com/pypa/build) | `1.5.0` | `1.5.1` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.15.0` | `7.15.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.5` | `3.29.7` |\n| [librt](https://github.com/mypyc/librt) | `0.12.0` | `0.13.0` |\n\nUpdates `ruff` from 0.15.20 to 0.15.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/releases\"\u003eruff's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md\"\u003eruff's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.21\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-07-09.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--add-ignore\u003c/code\u003e for adding \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26346\"\u003e#26346\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-comprehensions\u003c/code\u003e] Drop \u003ccode\u003eC409\u003c/code\u003e tuple comprehension preview behavior (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25707\"\u003e#25707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid whitespace normalization when formatting comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26455\"\u003e#26455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Lint and fix use of deprecated \u003ccode\u003eabc\u003c/code\u003e decorators (\u003ccode\u003eUP051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26417\"\u003e#26417\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRefine non-empty f-string detection (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26526\"\u003e#26526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect syntax errors in individual notebook cells (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26419\"\u003e#26419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-implicit-str-concat\u003c/code\u003e] Fix \u003ccode\u003eISC003\u003c/code\u003e autofix incorrectly stripping \u003ccode\u003e+\u003c/code\u003e from comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26554\"\u003e#26554\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRule changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-executable\u003c/code\u003e] Mark \u003ccode\u003eEXE004\u003c/code\u003e fix as unsafe (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26033\"\u003e#26033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Mark \u003ccode\u003ePYI061\u003c/code\u003e fixes as unsafe in Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26533\"\u003e#26533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Skip \u003ccode\u003eoverload-with-docstring\u003c/code\u003e in stub files (\u003ccode\u003eD418\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26318\"\u003e#26318\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid per-token source index visitor calls (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26506\"\u003e#26506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache parenthesized expression boundaries in the formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26344\"\u003e#26344\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline \u003ccode\u003efits_element\u003c/code\u003e in formatter (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26429\"\u003e#26429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline formatter printing hot paths (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26504\"\u003e#26504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLazily create builtin bindings (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26510\"\u003e#26510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip empty trivia scans in the source indexer (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26507\"\u003e#26507\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse ICF for macOS release builds (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25780\"\u003e#25780\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--extend-exclude\u003c/code\u003e to \u003ccode\u003eruff format\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26372\"\u003e#26372\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u0026quot;How does Ruff's import sorting compare to isort?\u0026quot; link to README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26530\"\u003e#26530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix Mozilla Firefox repository link in README (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26537\"\u003e#26537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-bandit\u003c/code\u003e] Fix misleading docstring for \u003ccode\u003emako-templates\u003c/code\u003e (\u003ccode\u003eS702\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26432\"\u003e#26432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Fix non-triggering example for \u003ccode\u003eif-key-in-dict-del\u003c/code\u003e (\u003ccode\u003eRUF051\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26433\"\u003e#26433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EkriirkE\"\u003e\u003ccode\u003e@​EkriirkE\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tingerrr\"\u003e\u003ccode\u003e@​tingerrr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/s-rigaud\"\u003e\u003ccode\u003e@​s-rigaud\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/3e1f63645109e69f9bccc7be354c5ee4672fb8f3\"\u003e\u003ccode\u003e3e1f636\u003c/code\u003e\u003c/a\u003e Bump 0.15.21 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26676\"\u003e#26676\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4059807d0c853fbb79110b1f5fd7212e1a532888\"\u003e\u003ccode\u003e4059807\u003c/code\u003e\u003c/a\u003e [ty] Infer metaclass-declared attributes on class instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26512\"\u003e#26512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/013e5d0ff64e6198af1770f8b71d35d1390def39\"\u003e\u003ccode\u003e013e5d0\u003c/code\u003e\u003c/a\u003e [ty] Use a dedicated project name type (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26665\"\u003e#26665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7ad39ad5fae00226fbe6bc17a6f05d1746abbfde\"\u003e\u003ccode\u003e7ad39ad\u003c/code\u003e\u003c/a\u003e [ty] Avoid allocating decorated parameter names (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26666\"\u003e#26666\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c36f66207d6968dbbe1769bd50f80a4c02d17b57\"\u003e\u003ccode\u003ec36f662\u003c/code\u003e\u003c/a\u003e Improve performance of rendering edits in preview mode (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26565\"\u003e#26565\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ad264082c713ec6aad9191e5a6a8d342ed480a4b\"\u003e\u003ccode\u003ead26408\u003c/code\u003e\u003c/a\u003e [ty] Gate membership narrowing on \u003ccode\u003e__contains__\u003c/code\u003e semantics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25964\"\u003e#25964\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4594ca7366773b2a4b6d2ee08001d6e80d6e3eae\"\u003e\u003ccode\u003e4594ca7\u003c/code\u003e\u003c/a\u003e [ty] Add variant discriminators for \u003ccode\u003eCodeGeneratorKind\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26659\"\u003e#26659\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1af03da7b8cf1b37c344bef9ec85f9408ac3ff0e\"\u003e\u003ccode\u003e1af03da\u003c/code\u003e\u003c/a\u003e [ty] Pydantic: Fix float conversion in unions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26655\"\u003e#26655\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a004a3620518d1b67f4d7aae584ab1dd156a0ef6\"\u003e\u003ccode\u003ea004a36\u003c/code\u003e\u003c/a\u003e [ty] Handle callable classes in solver (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26090\"\u003e#26090\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/d8ef3b058704256431e50352301d5afb41ba606d\"\u003e\u003ccode\u003ed8ef3b0\u003c/code\u003e\u003c/a\u003e [ty] Parse all supported Google docstring sections. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26653\"\u003e#26653\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.1.0 to 2.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.3\u003c/h2\u003e\n\u003cp\u003eWe've just uploaded mypy 2.3.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eThe Upcoming Switch to the New Native Parser\u003c/h3\u003e\n\u003cp\u003eWe are planning to enable the new native parser (\u003ccode\u003e--native-parser\u003c/code\u003e) by\ndefault soon. We recommend that you test the native parser in your projects and report\nany issues in the \u003ca href=\"https://github.com/python/mypy/issues\"\u003emypy issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003eMypyc Free-threading Memory Safety\u003c/h3\u003e\n\u003cp\u003eFree-threaded Python builds that don't have the GIL require additional synchronization\nprimitives or lock-free algorithms to ensure memory safety when there are race conditions\n(for example, when a thread reads a list item while another thread writes the same list\nitem concurrently). This release greatly improves memory safety of free threading.\u003c/p\u003e\n\u003cp\u003eList operations are now memory-safe on free threaded Python builds, even in the presence of\nrace conditions. This has some performance cost. For list-heavy workloads, using\n\u003ccode\u003elibrt.vecs.vec\u003c/code\u003e instead of list is often significantly faster, but note that \u003ccode\u003evec\u003c/code\u003e is not\n(and likely won't be) fully memory safe, and the user is expected to avoid race conditions.\nThe newly introduced \u003ccode\u003elibrt.threading.Lock\u003c/code\u003e helps with this. Using variable-length tuples\ncan also be more efficient than lists, since tuples are immutable and don't require\nexpensive synchronization to ensure memory safety.\u003c/p\u003e\n\u003cp\u003eInstance attribute access is also (mostly) memory safe now on free-threaded builds in\nthe presence of race conditions. We are planning to fix the remaining unsafe cases in a\nfuture release.\u003c/p\u003e\n\u003cp\u003eFull list of changes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake attribute access memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21705\"\u003e21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsafe borrowing of instance attributes with free-threading (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21688\"\u003e21688\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake list get/set item more memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21683\"\u003e21683\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDon't borrow list items on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21679\"\u003e21679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake multiple assignment from list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21684\"\u003e21684\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003efor\u003c/code\u003e loop over list memory-safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21686\"\u003e21686\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix memory safety of \u003ccode\u003elist.count\u003c/code\u003e on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21680\"\u003e21680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMake \u003ccode\u003evec\u003c/code\u003e creation from list memory safe on free-threaded builds (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21681\"\u003e21681\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8aabf8435357eaffceca7237f371e293b8168e54\"\u003e\u003ccode\u003e8aabf84\u003c/code\u003e\u003c/a\u003e Drop +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4d8ad2ab5e86c99581b73775f2c00b9b8265b589\"\u003e\u003ccode\u003e4d8ad2a\u003c/code\u003e\u003c/a\u003e Update changelog for 2.3 release (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21728\"\u003e#21728\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2c2154672040c52e481f423854d104e6cf172585\"\u003e\u003ccode\u003e2c21546\u003c/code\u003e\u003c/a\u003e [mypyc] Update documentation of race conditions under free threading (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21726\"\u003e#21726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/a9f62a3cf98a58a7a2607b7c81695802b39f5edc\"\u003e\u003ccode\u003ea9f62a3\u003c/code\u003e\u003c/a\u003e [mypyc] Make attribute access memory safe on free-threaded builds (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21705\"\u003e#21705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/0faa413ebf7c924a864ef5dabd70303d898e7766\"\u003e\u003ccode\u003e0faa413\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003ePYODIDE\u003c/code\u003e environment variable for Emscripten cross-compilation detection...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3d75cdb09f0928fa8b83e5ef03572ed878ac8d09\"\u003e\u003ccode\u003e3d75cdb\u003c/code\u003e\u003c/a\u003e [mypyc] Borrow final attributes more aggressively (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21702\"\u003e#21702\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/24c237d85b48f618e655ffff1dc0f19089d9b599\"\u003e\u003ccode\u003e24c237d\u003c/code\u003e\u003c/a\u003e [mypyc] Improve documentation of Final (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21713\"\u003e#21713\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/b5be217392b9b2771d1764066b9d600bf93ce7a8\"\u003e\u003ccode\u003eb5be217\u003c/code\u003e\u003c/a\u003e [mypyc] Update free threading Python compatibility docs (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21711\"\u003e#21711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/cbcb51add3094ec91b29cdd4c624943bf251b63f\"\u003e\u003ccode\u003ecbcb51a\u003c/code\u003e\u003c/a\u003e Narrow for frozendict membership check (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21709\"\u003e#21709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/af2bc0f3cc7f2f129f0c11294158d0c292692c3d\"\u003e\u003ccode\u003eaf2bc0f\u003c/code\u003e\u003c/a\u003e Sync typeshed (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21707\"\u003e#21707\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/v2.1.0...v2.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `build` from 1.5.0 to 1.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/releases\"\u003ebuild's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.5.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(cli): accept sdist tarball as srcdir argument by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1057\"\u003epypa/build#1057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: drop 3.9 branches for version_info checks by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1059\"\u003epypa/build#1059\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etests: skip test_uv_install_strips_pythonpath with missing uv by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1063\"\u003epypa/build#1063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: remove myself from codeowners by \u003ca href=\"https://github.com/FFY00\"\u003e\u003ccode\u003e@​FFY00\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1066\"\u003epypa/build#1066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: safe_extractall to use pathlib.Path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1060\"\u003epypa/build#1060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: secure GitHub Actions workflows by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1068\"\u003epypa/build#1068\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: cover config settings forwarding in build_package and build_package_via_sdist by \u003ca href=\"https://github.com/terminalchai\"\u003e\u003ccode\u003e@​terminalchai\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1058\"\u003epypa/build#1058\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump virtualenv from 20.17 to 20.36.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1076\"\u003epypa/build#1076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump wheel from 0.36.0 to 0.38.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1075\"\u003epypa/build#1075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;build(deps): bump pip from 22.3 to 26.1\u0026quot; by \u003ca href=\"https://github.com/layday\"\u003e\u003ccode\u003e@​layday\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1074\"\u003epypa/build#1074\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: enforce lazy imports with flake8-lazy by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1088\"\u003epypa/build#1088\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(deps): show wanted vs found in missing-deps error by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1082\"\u003epypa/build#1082\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci: align action pin version comments by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1091\"\u003epypa/build#1091\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update isolated env example to use DefaultIsolatedEnv by \u003ca href=\"https://github.com/shenxianpeng\"\u003e\u003ccode\u003e@​shenxianpeng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1090\"\u003epypa/build#1090\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🧪 test: compact test_parse_args with a typed make_kwargs helper by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1092\"\u003epypa/build#1092\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(typing): ban explicit Any across src and tests by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1093\"\u003epypa/build#1093\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): warn on valueless config settings by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1081\"\u003epypa/build#1081\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): add --sdist-extract-dir to reuse compiler caches by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1085\"\u003epypa/build#1085\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e⚠️ feat(util): deprecate project_wheel_metadata by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1084\"\u003epypa/build#1084\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump pre-commit tags by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1095\"\u003epypa/build#1095\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat: report resolved build dependency versions by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1086\"\u003epypa/build#1086\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(env): control the isolated build environment location by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1083\"\u003epypa/build#1083\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): machine-readable build report, and metadata from a wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1080\"\u003epypa/build#1080\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(cli): drain verbose subprocess output without a worker thread by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1098\"\u003epypa/build#1098\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(cli): minor cleanups in builder and CLI by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1099\"\u003epypa/build#1099\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(env): reject a file as --env-dir and drop a mutable default by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1100\"\u003epypa/build#1100\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add classifier for 3.15 (testing on beta already) by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1104\"\u003epypa/build#1104\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add lockfiles to gitignore by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1101\"\u003epypa/build#1101\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: add check-dist by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1103\"\u003epypa/build#1103\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(cli): surface debug paths when a backend build fails by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1087\"\u003epypa/build#1087\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: shorten changelog entries to concise highlights by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1105\"\u003epypa/build#1105\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): raise dependency floors to 3.10 minimums and drop pytest cap by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1107\"\u003epypa/build#1107\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump mypy, restrict pytest 9.1.0 by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1108\"\u003epypa/build#1108\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(cli): fix CLI warnings being written to stdout instead of stderr by \u003ca href=\"https://github.com/ymyzk\"\u003e\u003ccode\u003e@​ymyzk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1111\"\u003epypa/build#1111\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump vulnerable dependency floors (virtualenv, wheel) by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1113\"\u003epypa/build#1113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: default --installer to pip in argparse by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1117\"\u003epypa/build#1117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: build correct dest path in Windows symlink support probe by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1118\"\u003epypa/build#1118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: derive dist-info directory from wheel contents, not filename by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1119\"\u003epypa/build#1119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use LF instead of os.linesep when writing pip/uv requirements files by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1120\"\u003epypa/build#1120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: decide color support per output stream, not solely from stdout by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1123\"\u003epypa/build#1123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: open the wheel only once in metadata_path by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1126\"\u003epypa/build#1126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: minor robustness fixes from code review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1121\"\u003epypa/build#1121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erefactor: simplify code paths found in review by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1124\"\u003epypa/build#1124\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: memoize check_dependency by \u003ca href=\"https://github.com/henryiii\"\u003e\u003ccode\u003e@​henryiii\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1122\"\u003epypa/build#1122\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: isolate color tests from NO_COLOR and FORCE_COLOR by \u003ca href=\"https://github.com/Yearnzq\"\u003e\u003ccode\u003e@​Yearnzq\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/build/pull/1128\"\u003epypa/build#1128\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/build/blob/main/CHANGELOG.rst\"\u003ebuild's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e####################\n1.5.1 (2026-07-09)\n####################\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eFeatures\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--report=PATH\u003c/code\u003e to write a machine-readable JSON report of built artifacts; \u003ccode\u003e--metadata\u003c/code\u003e now also accepts\n\u003ccode\u003e.whl\u003c/code\u003e files - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e198\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003esrcdir\u003c/code\u003e argument now accepts \u003ccode\u003e.tar.gz\u003c/code\u003e source distributions, extracting and building from them - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e311\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eThe \u0026quot;Unmet dependencies\u0026quot; error from \u003ccode\u003e--no-isolation\u003c/code\u003e builds now shows the wanted version, found version, and\ninterpreter - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e504\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e to extract the intermediate sdist into a persistent directory, enabling compiler cache reuse\nacross rebuilds - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e614\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--env-dir\u003c/code\u003e to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds -\nby :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e655\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ePrint a summary of resolved dependency versions (\u003ccode\u003ename==version\u003c/code\u003e) after installing them in isolated builds - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e959\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eOn build failure, print a tip pointing to \u003ccode\u003e--env-dir\u003c/code\u003e and \u003ccode\u003e--sdist-extract-dir\u003c/code\u003e for debugging and link to the \u0026quot;Debug\na failed build\u0026quot; how-to - reported by :user:\u003ccode\u003edimpase\u003c/code\u003e, implemented by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e966\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDrain verbose subprocess output inline instead of using a \u003ccode\u003eThreadPoolExecutor\u003c/code\u003e, which silently swallowed logging\nerrors - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1098\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eReject a file passed as \u003ccode\u003e--env-dir\u003c/code\u003e with a clear error instead of a raw \u003ccode\u003eFileExistsError\u003c/code\u003e - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1100\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eEmit CLI warnings to stderr instead of stdout, so they no longer corrupt \u003ccode\u003e--metadata\u003c/code\u003e JSON output on stdout - by\n:user:\u003ccode\u003eymyzk\u003c/code\u003e (:issue:\u003ccode\u003e1111\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix the Windows symlink support probe always returning \u003ccode\u003eFalse\u003c/code\u003e due to a stale object interpolated into the destination\npath - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1118\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003emetadata_path\u003c/code\u003e's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by\n:user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1119\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWrite pip/uv requirements and constraints files with \u003ccode\u003e\\n\u003c/code\u003e instead of \u003ccode\u003eos.linesep\u003c/code\u003e, avoiding doubled \u003ccode\u003e\\r\\r\\n\u003c/code\u003e line\nendings on Windows - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1120\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eBatch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable\ndefault build-system table between builders, keep the original error when isolated-environment setup fails early, and\nraise \u003ccode\u003eBuildException\u003c/code\u003e for an invalid wheel - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1121\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eDecide color support independently for stdout and stderr instead of only checking \u003ccode\u003estdout.isatty()\u003c/code\u003e, so redirecting\none stream no longer disables or leaks ANSI colors on the other - by :user:\u003ccode\u003ehenryiii\u003c/code\u003e (:issue:\u003ccode\u003e1123\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eDeprecations and Removals\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate :func:\u003ccode\u003ebuild.util.project_wheel_metadata\u003c/code\u003e; use \u003ccode\u003epython -m build --metadata\u003c/code\u003e instead - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e (:issue:\u003ccode\u003e557\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eWarn on config settings without a value (e.g. \u003ccode\u003e-C--my-flag\u003c/code\u003e); use \u003ccode\u003e-C--my-flag=\u003c/code\u003e instead for compatibility with pip\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/d08fcd723500a7d676867144e1e7a22b650aeb7d\"\u003e\u003ccode\u003ed08fcd7\u003c/code\u003e\u003c/a\u003e chore: prepare for 1.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/135801c502a7b36e25628d7c3ea9042fe8afa138\"\u003e\u003ccode\u003e135801c\u003c/code\u003e\u003c/a\u003e test: isolate color tests from NO_COLOR and FORCE_COLOR (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1128\"\u003e#1128\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/820d4e5638eda9aa744528ab6b9a0e4be98d7d41\"\u003e\u003ccode\u003e820d4e5\u003c/code\u003e\u003c/a\u003e perf: memoize check_dependency (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1122\"\u003e#1122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/6c03264d186ce7a6c9f1e1990408a3a215dc7610\"\u003e\u003ccode\u003e6c03264\u003c/code\u003e\u003c/a\u003e pre-commit: bump repositories (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1127\"\u003e#1127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/43c337a6bf55cbf2737bf938f3968be46ebc48b7\"\u003e\u003ccode\u003e43c337a\u003c/code\u003e\u003c/a\u003e refactor: simplify code paths found in review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1124\"\u003e#1124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/260ae22ee29fbca9b452a1b44cf3aacd09bb9250\"\u003e\u003ccode\u003e260ae22\u003c/code\u003e\u003c/a\u003e fix: minor robustness fixes from code review (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1121\"\u003e#1121\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/100e86e5e4f99167416b1d98783fc095223e0b8f\"\u003e\u003ccode\u003e100e86e\u003c/code\u003e\u003c/a\u003e refactor: open the wheel only once in metadata_path (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1126\"\u003e#1126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/272db6ce3474299b763674550ba0075954177ed3\"\u003e\u003ccode\u003e272db6c\u003c/code\u003e\u003c/a\u003e fix: decide color support per output stream, not solely from stdout (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1123\"\u003e#1123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/bc4ca7c7cb2033d7fecbfe82f8b3d7df7376572f\"\u003e\u003ccode\u003ebc4ca7c\u003c/code\u003e\u003c/a\u003e fix: use LF instead of os.linesep when writing pip/uv requirements files (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1120\"\u003e#1120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/build/commit/16d8143d9979fc5432b8b1effb1dc3f6048c7840\"\u003e\u003ccode\u003e16d8143\u003c/code\u003e\u003c/a\u003e fix: derive dist-info directory from wheel contents, not filename (\u003ca href=\"https://redirect.github.com/pypa/build/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/build/compare/1.5.0...1.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.15.0 to 7.15.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.15.1 — 2026-07-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: in the HTML report with \u003ccode\u003eshow_contexts\u003c/code\u003e enabled, a context label\ncontaining \u003ccode\u003e\u0026lt;/script\u0026gt;\u003c/code\u003e (for example a parametrized pytest node id) could\nclose the inline \u003ccode\u003e\u0026lt;script\u0026gt;\u003c/code\u003e element in a file page early, injecting markup.\nContext labels are now fully escaped. Thanks, \u003ccode\u003eRajath Mohare \u0026lt;pull 2224_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eA number of performance improvements thanks to Paul Kehrer, in pull requests\n\u003ccode\u003e2213 \u0026lt;pull 2213_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2214 \u0026lt;pull 2214_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2215 \u0026lt;pull 2215_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2216 \u0026lt;pull 2216_\u0026gt;\u003c/code\u003e\u003c/em\u003e, \u003ccode\u003e2218 \u0026lt;pull 2218_\u0026gt;\u003c/code\u003e\u003cem\u003e, \u003ccode\u003e2220 \u0026lt;pull 2220_\u0026gt;\u003c/code\u003e\u003c/em\u003e, and \u003ccode\u003e2221 \u0026lt;pull 2221_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _pull 2213: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2213\"\u003ecoveragepy/coveragepy#2213\u003c/a\u003e\n.. _pull 2214: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2214\"\u003ecoveragepy/coveragepy#2214\u003c/a\u003e\n.. _pull 2215: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2215\"\u003ecoveragepy/coveragepy#2215\u003c/a\u003e\n.. _pull 2216: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2216\"\u003ecoveragepy/coveragepy#2216\u003c/a\u003e\n.. _pull 2218: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2218\"\u003ecoveragepy/coveragepy#2218\u003c/a\u003e\n.. _pull 2220: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2220\"\u003ecoveragepy/coveragepy#2220\u003c/a\u003e\n.. _pull 2221: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2221\"\u003ecoveragepy/coveragepy#2221\u003c/a\u003e\n.. _pull 2224: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2224\"\u003ecoveragepy/coveragepy#2224\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-15-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/da63bedb76085eddd4819900b39557407086dc12\"\u003e\u003ccode\u003eda63bed\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bc35e64344e0737f6c71dee6cff59da0ad72c30f\"\u003e\u003ccode\u003ebc35e64\u003c/code\u003e\u003c/a\u003e docs: prep for 7.15.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/182b010b63a2661c86df1ca3b3f84ce8511ee435\"\u003e\u003ccode\u003e182b010\u003c/code\u003e\u003c/a\u003e perf: resolve sysmon branch events lazily, one pair at a time (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ee271ee21fdf4c169648ff4ad3e9dd9d163e5e7f\"\u003e\u003ccode\u003eee271ee\u003c/code\u003e\u003c/a\u003e perf: compute multiline maps cheaply in the sysmon core (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1441b960c698d591d3a22a2190635039320459de\"\u003e\u003ccode\u003e1441b96\u003c/code\u003e\u003c/a\u003e chore: bump the action-dependencies group with 6 updates (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2225\"\u003e#2225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/dd806350de678c9e4f137ffdda5cb131d269019c\"\u003e\u003ccode\u003edd80635\u003c/code\u003e\u003c/a\u003e fix: escape context labels in html report inline script block (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2224\"\u003e#2224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/7c3ae71ca654a0b0e3184d8574aefd9dd511a006\"\u003e\u003ccode\u003e7c3ae71\u003c/code\u003e\u003c/a\u003e docs: normalize earlier history order (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2222\"\u003e#2222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/088dc601697077364c46967f3ac9afe3bde0083b\"\u003e\u003ccode\u003e088dc60\u003c/code\u003e\u003c/a\u003e chore: make upgrade\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f7e15a8e31bd98d8f89a7e4602fa6b8bd7c5e468\"\u003e\u003ccode\u003ef7e15a8\u003c/code\u003e\u003c/a\u003e test: upload .json and .xml coverage reports\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/3b6211214d7033e86b88a6e032474c20b7c32814\"\u003e\u003ccode\u003e3b62112\u003c/code\u003e\u003c/a\u003e docs: thanks, Paul Kehrer\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.15.0...7.15.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.5 to 3.29.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/py-filelock/releases\"\u003efilelock's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.29.7\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003easyncio: detect cross-instance reentrant deadlocks before the poll loop by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/586\"\u003etox-dev/filelock#586\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft_rw): evict non-regular write marker without reading it by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/588\"\u003etox-dev/filelock#588\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e_util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/589\"\u003etox-dev/filelock#589\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.6...3.29.7\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.6...3.29.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.6\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eserialise singleton construction in FileLockMeta by \u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/581\"\u003etox-dev/filelock#581\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e_util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file by \u003ca href=\"https://github.com/HrachShah\"\u003e\u003ccode\u003e@​HrachShah\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/582\"\u003etox-dev/filelock#582\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest: silence fork DeprecationWarning on 3.15 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/585\"\u003etox-dev/filelock#585\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.5...3.29.6\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.5...3.29.6\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1efb8932c08789deb08ad93a91d8996cc36bb9cc\"\u003e\u003ccode\u003e1efb893\u003c/code\u003e\u003c/a\u003e _util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/3547d58a293651fcf6cf8544b0002e6d7b357332\"\u003e\u003ccode\u003e3547d58\u003c/code\u003e\u003c/a\u003e soft_rw: evict a non-regular write marker without reading it (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/616400e382cdc9cc8c95823014e4d2d61a70095c\"\u003e\u003ccode\u003e616400e\u003c/code\u003e\u003c/a\u003e asyncio: detect cross-instance reentrant deadlocks before the poll loop (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/586\"\u003e#586\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f8b0e9341cba0cc12eacf50605f290123f33ca32\"\u003e\u003ccode\u003ef8b0e93\u003c/code\u003e\u003c/a\u003e test: silence fork DeprecationWarning on 3.15 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/585\"\u003e#585\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b68be65b941836dce63cba2cf844dc55935ca8ba\"\u003e\u003ccode\u003eb68be65\u003c/code\u003e\u003c/a\u003e _util: drop the dead st_mtime=0 short-circuit in raise_on_not_writable_file (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/a833dd961e4a1ee569e42c10ca305cd088e14c1b\"\u003e\u003ccode\u003ea833dd9\u003c/code\u003e\u003c/a\u003e serialise singleton construction in FileLockMeta (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/581\"\u003e#581\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/bb2f884c275491222f620b8306d9b9bbc4f406bf\"\u003e\u003ccode\u003ebb2f884\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/583\"\u003e#583\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/da9c3ed54fec55dede6b308319587ec2242f709a\"\u003e\u003ccode\u003eda9c3ed\u003c/code\u003e\u003c/a\u003e :moneybag: Surface GitHub Sponsors + thanks.dev\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.5...3.29.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `librt` from 0.12.0 to 0.13.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/05a6a214c72932b113efc2012a7e9e6b54fd0ff8\"\u003e\u003ccode\u003e05a6a21\u003c/code\u003e\u003c/a\u003e Sync mypy and bump version to 0.13.0\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/librt/compare/v0.12.0...v0.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/dribia/poetry-git-branch-plugin/pull/100","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/dribia%2Fpoetry-git-branch-plugin/issues/100","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/100/packages"}},{"old_version":"\u003e=3.29.4","new_version":"\u003e=3.29.5","update_type":"patch","path":"/services/pre-processing","pr_created_at":"2026-07-06T05:18:00.000Z","version_change":"\u003e=3.29.4 → \u003e=3.29.5","issue":{"uuid":"4816189319","node_id":"PR_kwDOSpbqEs7uManv","number":97,"state":"open","title":"chore(deps): update filelock requirement from \u003e=3.29.4 to \u003e=3.29.5 in /services/pre-processing","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-06T05:18:00.000Z","updated_at":"2026-07-06T05:18:01.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"filelock","old_version":"\u003e=3.29.4","new_version":"\u003e=3.29.5","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":"/services/pre-processing","ecosystem":"pip"},"body":"Updates the requirements on [filelock](https://github.com/tox-dev/py-filelock) to permit the latest version.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/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\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/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.29.4...3.29.5\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Lazynext-Platform/Lazynext/pull/97","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lazynext-Platform%2FLazynext/issues/97","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/97/packages"}},{"old_version":"3.20.0","new_version":"3.20.3","update_type":"patch","path":null,"pr_created_at":"2026-07-05T07:20:42.000Z","version_change":"3.20.0 → 3.20.3","issue":{"uuid":"4811982359","node_id":"PR_kwDOPUnMy87t_17t","number":134,"state":"open","title":"chore(deps): bump the uv group across 1 directory with 7 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-05T07:20:42.000Z","updated_at":"2026-07-05T07:22:30.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv","update_count":7,"packages":[{"name":"requests","old_version":"2.32.5","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"filelock","old_version":"3.20.0","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"idna","old_version":"3.11","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"pillow","old_version":"11.3.0","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"protobuf","old_version":"6.32.1","new_version":"6.33.5","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"urllib3","old_version":"2.5.0","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"virtualenv","old_version":"20.35.4","new_version":"20.36.1","repository_url":"https://github.com/pypa/virtualenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 7 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.20.0` | `3.20.3` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.15` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.3.0` | `12.2.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.32.1` | `6.33.5` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.5.0` | `2.7.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `20.35.4` | `20.36.1` |\n\n\nUpdates `requests` from 2.32.5 to 2.33.0\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.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\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\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\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/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\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#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\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\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc 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/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/753fd08c5eacce0aa0df73fe47e49525c67e0a29\"\u003e\u003ccode\u003e753fd08\u003c/code\u003e\u003c/a\u003e docs: fix FAQ grammar in httplib2 example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/774a0b837a194ee885d4fdd9ca947900cc3daf71\"\u003e\u003ccode\u003e774a0b8\u003c/code\u003e\u003c/a\u003e docs(socks): same block as other sections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/9c72a41bec8597f948c9d8caa5dc3f12273b3303\"\u003e\u003ccode\u003e9c72a41\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.33.0 to 4.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/ebf71906798ec82f34e07d3168f8b8aecaf8a3be\"\u003e\u003ccode\u003eebf7190\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.32.0 to 4.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0e4ae38f0c93d4f92a96c774bd52c069d12a4798\"\u003e\u003ccode\u003e0e4ae38\u003c/code\u003e\u003c/a\u003e docs: exclude Response.is_permanent_redirect from API docs (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7244\"\u003e#7244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d568f47278492e630cc990a259047c67991d007a\"\u003e\u003ccode\u003ed568f47\u003c/code\u003e\u003c/a\u003e docs: clarify Quickstart POST example (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6960\"\u003e#6960\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.20.0 to 3.20.3\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Unix systems without O_NOFOLLOW by \u003ca href=\"https://github.com/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/464\"\u003etox-dev/filelock#464\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/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\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.20.1...3.20.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.1...3.20.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2025-68146: Fix TOCTOU symlink vulnerability in lock file creation 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/461\"\u003etox-dev/filelock#461\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.20.0...3.20.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.0...3.20.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2e7d4046b6a2b375a573bcfbad21827b99f8939\"\u003e\u003ccode\u003ef2e7d40\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/50888548eb2f008d372e71f2835a47851ab83836\"\u003e\u003ccode\u003e5088854\u003c/code\u003e\u003c/a\u003e Support Unix systems without O_NOFOLLOW (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/377f62251d7cdf30768cc9ee1eb31cea1551c71b\"\u003e\u003ccode\u003e377f622\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/460\"\u003e#460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4724d7f8c3393ec1f048c93933e6e3e6ec321f0e\"\u003e\u003ccode\u003e4724d7f\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in lock file creation (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/461\"\u003e#461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/cb69414a2327cf0a9887e12054d1dc112ee700af\"\u003e\u003ccode\u003ecb69414\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/459\"\u003e#459\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0769294f14a6c62eea64741722f7acef5386b4cd\"\u003e\u003ccode\u003e0769294\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/458\"\u003e#458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/414193a188892bd376eb5c56eb45a9cf8ecc9284\"\u003e\u003ccode\u003e414193a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/457\"\u003e#457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1456797beb94ad59e5627462ad29f7ed3a966626\"\u003e\u003ccode\u003e1456797\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/456\"\u003e#456\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8d6bf90af313ac7fd6e41ef2b715d91dd6858f5c\"\u003e\u003ccode\u003e8d6bf90\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/455\"\u003e#455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.20.0...3.20.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.11 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\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/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.11...v3.15\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 11.3.0 to 12.2.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.2.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9522\"\u003e#9522\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd loader plugins: AMOS abk, Atari Degas, 40+ more obscure formats via Netpbm \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9482\"\u003e#9482\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9515\"\u003e#9515\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eJeffrey A. Clark -\u0026gt; Jeffrey 'Alex' Clark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9513\"\u003e#9513\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 release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9394\"\u003e#9394\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9419\"\u003e#9419\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9456\"\u003e#9456\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9467\"\u003e#9467\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 Amiga Workbench .info loader to 3rd party plugins list \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9459\"\u003e#9459\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMerge PFM documentation into PPM \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9434\"\u003e#9434\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 macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9431\"\u003e#9431\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix CVE number \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9430\"\u003e#9430\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\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 xz to 5.8.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9523\"\u003e#9523\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 libjpeg-turbo to 3.1.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9507\"\u003e#9507\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 libpng to 1.6.56 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9499\"\u003e#9499\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 freetype to 2.14.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9485\"\u003e#9485\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libavif to 1.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9479\"\u003e#9479\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 13.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9461\"\u003e#9461\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 Ghostscript to 10.7.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9469\"\u003e#9469\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 harfbuzz to 13.0.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9453\"\u003e#9453\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 libavif to 1.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9460\"\u003e#9460\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 freetype to 2.14.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9449\"\u003e#9449\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 actions/download-artifact action to v8 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9451\"\u003e#9451\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.55 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9425\"\u003e#9425\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\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCleanup .spider extension in the same test where it is added \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9517\"\u003e#9517\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRun tests in parallel via tox for 3.5x speedup \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9516\"\u003e#9516\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eEnable colour in CI logs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9486\"\u003e#9486\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Ghostscript to 10.7.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9469\"\u003e#9469\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eSimplify TGA test code \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9477\"\u003e#9477\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 tests to check for ValueError when encoding an empty image \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9464\"\u003e#9464\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpgrade CI from \u003ccode\u003emacos-15-intel\u003c/code\u003e to \u003ccode\u003emacos-26-intel\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9454\"\u003e#9454\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd check-case-conflict hook \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9446\"\u003e#9446\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eSpecify platform when pulling docker image \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9440\"\u003e#9440\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eGHA: Cache libavif and webp builds for Ubuntu \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9437\"\u003e#9437\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9431\"\u003e#9431\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\u003eOther changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck calloc return value \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9527\"\u003e#9527\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCheck all allocs in the Arrow tree \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9488\"\u003e#9488\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eReject non-numeric elements inside list coords \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9526\"\u003e#9526\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove variable declaration inside define \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9525\"\u003e#9525\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/3c41c095064200a02672d89cc5ff629eaf4b0d4f\"\u003e\u003ccode\u003e3c41c09\u003c/code\u003e\u003c/a\u003e 12.2.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/cdaa29eb520291c4f1fb50fb71ae46502d41e460\"\u003e\u003ccode\u003ecdaa29e\u003c/code\u003e\u003c/a\u003e Check calloc return value (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9527\"\u003e#9527\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/585b2f5a780722c8a5bfffb3a40f7f42e8a205be\"\u003e\u003ccode\u003e585b2f5\u003c/code\u003e\u003c/a\u003e Check calloc return value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ecf011ea15991d4cebacd946e58270cc30b0f2c1\"\u003e\u003ccode\u003eecf011e\u003c/code\u003e\u003c/a\u003e Check all allocs in the Arrow tree (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9488\"\u003e#9488\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/cf6de8ca9b23e714aa5310e1c791eda66fc0b670\"\u003e\u003ccode\u003ecf6de8c\u003c/code\u003e\u003c/a\u003e Reject non-numeric elements inside list coords (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9526\"\u003e#9526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ffdcede6516b28d9667c92929854023d17048b64\"\u003e\u003ccode\u003effdcede\u003c/code\u003e\u003c/a\u003e Update 12.2.0 release notes (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9522\"\u003e#9522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/7929d7760fe5a307ba5ae6eabdf70ae4486b147c\"\u003e\u003ccode\u003e7929d77\u003c/code\u003e\u003c/a\u003e Added security release notes (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/149\"\u003e#149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c4f7aa5dfb4dbd1242978ac235e01b9934ec6d3c\"\u003e\u003ccode\u003ec4f7aa5\u003c/code\u003e\u003c/a\u003e Added security release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/22cdb5f2e4b15250c06563b1124ac1667342712f\"\u003e\u003ccode\u003e22cdb5f\u003c/code\u003e\u003c/a\u003e Move variable declaration inside define (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9525\"\u003e#9525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/fc15b3b01899408ec989d7804c5283e13802d057\"\u003e\u003ccode\u003efc15b3b\u003c/code\u003e\u003c/a\u003e Resize tall images vertically first (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9524\"\u003e#9524\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/11.3.0...12.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `protobuf` from 6.32.1 to 6.33.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/protocolbuffers/protobuf/releases\"\u003eprotobuf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eProtocol Buffers v34.0-rc1\u003c/h2\u003e\n\u003ch1\u003eAnnouncements\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eThis version includes breaking changes to: C++, Objective-C, PHP, Python.\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e[Bazel] Remove deprecated ProtoInfo.transitive_imports. Use equivalent transitive_sources instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Make generator headers private (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/3a2af3510f0d454dbe3e4dc281674b61c4d20b9e\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/3a2af3510f0d454dbe3e4dc281674b61c4d20b9e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Add a debug check that the target of CopyFrom is not a descendant of the source. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/7a7589823d2cfaaf7994b050e98d5d553bc9b1c1\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/7a7589823d2cfaaf7994b050e98d5d553bc9b1c1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Add [[nodiscard]] to many APIs. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/a70115f33f9af2c4b2202c800b84837e7fe0d738\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/a70115f33f9af2c4b2202c800b84837e7fe0d738\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Make the arena-enabled constructors of \u003ccode\u003eRepeatedField\u003c/code\u003e, \u003ccode\u003eRepeatedPtrField\u003c/code\u003e, and \u003ccode\u003eMap\u003c/code\u003e private. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/ef890c3d0c79398c70e047fe5dd893f460ba2336\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/ef890c3d0c79398c70e047fe5dd893f460ba2336\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove deprecated FieldDescriptor::label() in OSS. Use is_repeated() or is_required() instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Removes proto2::util::MessageDifferencer::AddIgnoreCriteria that takes a raw pointer as an argument in favor of the overload that takes a unique_ptr. Remove macro PROTOBUF_FUTURE_REMOVE_ADD_IGNORE_CRITERIA (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/b115358c64127896fed88b8b5ef5d91d86d8cbae\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/b115358c64127896fed88b8b5ef5d91d86d8cbae\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove deprecated FieldDescriptor::has_optional_keyword() in OSS. Use is_repeated() or has_presence() instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/68346ec9348e932664e58c3ecdcd1478f95233a8\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/68346ec9348e932664e58c3ecdcd1478f95233a8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove AddUnusedImportTrackFile() and ClearUnusedImportTrackFiles(). Remove PROTOBUF_FUTURE_RENAME_ADD_UNUSED_IMPORT (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/837a2cd1d6c75402b2503ffe7cd8aeaf25868536\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/837a2cd1d6c75402b2503ffe7cd8aeaf25868536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove deprecated FieldDescriptor::is_optional() in OSS. Use (!is_required() \u0026amp;\u0026amp; !is_repeated()) instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/9dbc5d479a8e453921485d8d3de47fb3c005f1af\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/9dbc5d479a8e453921485d8d3de47fb3c005f1af\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] Remove deprecated UseDeprecatedLegacyJsonFieldConflicts() (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[C++] All entity names have length limit (2afb0dc)\u003c/li\u003e\n\u003cli\u003e[ObjC] Remove \u003ccode\u003egenerate_minimal_imports\u003c/code\u003e generation option warning (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/45b1297fdaad5a9436d0e207422168c38dc45ac4\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/45b1297fdaad5a9436d0e207422168c38dc45ac4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ObjC] Fix nullability annotations on some \u003ccode\u003eGPB*Dictionary\u003c/code\u003e types. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/ea67d6d26a48478a567c404679e3bb99cf230d50\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/ea67d6d26a48478a567c404679e3bb99cf230d50\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ObjC] Remove \u003ccode\u003e-[GPBFieldDescriptor optional]\u003c/code\u003e (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/3414dc151eb4dcbdb2ca952e2589993bf7af75c4\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/3414dc151eb4dcbdb2ca952e2589993bf7af75c4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Other] Remove deprecated flag for enabling MSVC support (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/97c979be6e0907e1051bee62584dac4594e73fa7\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/97c979be6e0907e1051bee62584dac4594e73fa7\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Remove deprecated PHP APIs (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/9c45014099a4f7004fab6dd1278de2f4f2a393c5\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/9c45014099a4f7004fab6dd1278de2f4f2a393c5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Remove deprecated PHP APIs FieldDescriptor getLabel, use IsRepeated or isRequired instead. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345\u003c/a\u003e, \u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/cd76e675b14d00dda5623b30835d2bc7105fccc6\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/cd76e675b14d00dda5623b30835d2bc7105fccc6\u003c/a\u003e, \u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/42081219920c6fad17ba6ddd1e28d111bcfb3345\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP]  Add PHP typehints for setters and remove redundant GPBUtil checks (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/pull/25296\"\u003eprotocolbuffers/protobuf#25296\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/aee03b78929c02461a5f9d8e136a2a016359b0cd\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/aee03b78929c02461a5f9d8e136a2a016359b0cd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP]  support default values for editions/proto2 (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/pull/25161\"\u003eprotocolbuffers/protobuf#25161\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/b01099d56350551bae3da88b97bf3027274c9f17\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/b01099d56350551bae3da88b97bf3027274c9f17\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Raise errors in OSS when assign bool to int/enum field in Python Proto. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/5b116fe2f14f49dd0cc3b76089983717f211025c\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/5b116fe2f14f49dd0cc3b76089983717f211025c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove float_format/double_format from python proto text_format (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/e4854a186e0bfa867d5bfa5cd850608a948fd488\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/e4854a186e0bfa867d5bfa5cd850608a948fd488\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Raise TypeError when convert non-timedelta to Duration, or convert non-datetime to Timestamp in python proto. (Original code may raise ArributeError) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/00aaca1b4d98954bc2933d7c8a5379ba6088124c\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/00aaca1b4d98954bc2933d7c8a5379ba6088124c\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove float_precision from python proto json_format (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/f027f1fcd52b9d080b7ee79f4024f53cf54e0dc5\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/f027f1fcd52b9d080b7ee79f4024f53cf54e0dc5\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove deprecated FieldDescriptor::label() in OSS. Use is_repeated() or is_required() instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/b76faa921fdd244f374c7be0bddd4050fc42c292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove deprecated FieldDescriptor.label (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/0a8ff55518ea5874478ad5b26515b31d186045a9\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/0a8ff55518ea5874478ad5b26515b31d186045a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove deprecated UseDeprecatedLegacyJsonFieldConflicts() (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/c301c2ca286327a21c50c0c4cd877afc9c655b00\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://protobuf.dev/news/\"\u003eProtobuf News\u003c/a\u003e may include additional announcements or pre-announcements for upcoming changes.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://protobuf.dev/support/migration/\"\u003eMigration Guide\u003c/a\u003e may include additional guidance for breaking changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eBazel\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix: cc_toolchain should prefer protoc when prebuilt flag is flipped. (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/issues/25168\"\u003e#25168\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/8c857c3a1c6a106b0a096f1c9fa504bfaca035a9\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/8c857c3a1c6a106b0a096f1c9fa504bfaca035a9\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBreaking change: Remove deprecated ProtoInfo.transitive_imports. Use equivalent transitive_sources instead (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/0a5c2f6b633c1e5259f566cb42d30fe347b8aadb\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFeat(bazel): wire up prebuilt protoc toolchain (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/issues/24115\"\u003e#24115\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/cc23698b486e690ea2eb873cc7596a87c74a3ba6\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/cc23698b486e690ea2eb873cc7596a87c74a3ba6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMigrate \u003ccode\u003eproto_descriptor_set\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/issues/23369\"\u003e#23369\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/8d4dfdd39a7a242a9ed631a6ab2192c57dd9b9c8\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/8d4dfdd39a7a242a9ed631a6ab2192c57dd9b9c8\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eCompiler\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRuby codegen: support generation of rbs files (\u003ca href=\"https://redirect.github.com/protocolbuffers/protobuf/issues/15633\"\u003e#15633\u003c/a\u003e) (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/6ebdf851ba78728f0aa145d38454ed9a316fb08d\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/6ebdf851ba78728f0aa145d38454ed9a316fb08d\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid collision name problems between a message named \u003ccode\u003eXyz\u003c/code\u003e and a direct sibling enum named \u003ccode\u003eXyzView\u003c/code\u003e (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/eba53e8f172b273d679759a72ce4250131ee3df1\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/eba53e8f172b273d679759a72ce4250131ee3df1\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneralizing and implementing ValidateFeatureSupport for both Options and Features during proto parsing (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/ed3c57114d8e2b47cca7697ddaa50c1b3762a6b0\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/ed3c57114d8e2b47cca7697ddaa50c1b3762a6b0\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix a bug with custom features outside of the \u003ccode\u003epb\u003c/code\u003e package. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/872d3ce7a4da00d7dcec33ced20cfe45235935e8\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/872d3ce7a4da00d7dcec33ced20cfe45235935e8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix import option handling when include_imports isn't set. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/9ef9e80afd9bc8379d578fe67e5ab0738728c04e\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/9ef9e80afd9bc8379d578fe67e5ab0738728c04e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix a bug in STRICT check of namespaced enums to properly check for 'reserved 1 to max' (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/1229d4adba24c0952ab85ce96bc7b7f8a1fe6d0f\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/1229d4adba24c0952ab85ce96bc7b7f8a1fe6d0f\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent accidental stripping of \u003ccode\u003edebug_redact\u003c/code\u003e options via import option. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/f58b098bffa7ca4045ef7773b09151a6af5d0c28\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/f58b098bffa7ca4045ef7773b09151a6af5d0c28\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eC++\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd EnumerateEnumValues function. (\u003ca href=\"https://github.com/protocolbuffers/protobuf/commit/397d5d99db274b379d1384814074bf7df39d32f7\"\u003ehttps://github.com/protocolbuffers/protobuf/commit/397d5d99db274b379d1384814074bf7df39d32f7\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\u003eSee full diff in \u003ca href=\"https://github.com/protocolbuffers/protobuf/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 2.5.0 to 2.7.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/urllib3/urllib3/releases\"\u003eurllib3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.7.0\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues. Impact was limited to specific use cases detailed in the accompanying advisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been read and decompressed partially. (Reported by \u003ca href=\"https://github.com/Cycloctane\"\u003e\u003ccode\u003e@​Cycloctane\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or \u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed using the official \u003ca href=\"https://pypi.org/project/brotli/\"\u003eBrotli\u003c/a\u003e library. (Reported by \u003ca href=\"https://github.com/kimkou2024\"\u003e\u003ccode\u003e@​kimkou2024\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee GHSA-mf9v-mfxr-j63j for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip sensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when redirecting to a different host. (GHSA-qccp-gfcp-xxvc reported by \u003ca href=\"https://github.com/christos-spearbit\"\u003e\u003ccode\u003e@​christos-spearbit\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better visibility of existing deprecation notices. Rescheduled the removal of deprecated features to version 3.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3763\"\u003eurllib3/urllib3#3763\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3720\"\u003eurllib3/urllib3#3720\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4979\"\u003eurllib3/urllib3#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3777\"\u003eurllib3/urllib3#3777\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed data buffered from previous partial reads. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3636\"\u003eurllib3/urllib3#3636\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the response after a partial read when \u003ccode\u003ecache_content=True\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4967\"\u003eurllib3/urllib3#4967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eHTTPResponse.stream()\u003c/code\u003e and \u003ccode\u003eHTTPResponse.read_chunked()\u003c/code\u003e to handle \u003ccode\u003eamt=0\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3793\"\u003eurllib3/urllib3#3793\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdated \u003ccode\u003e_TYPE_BODY\u003c/code\u003e type alias to include missing \u003ccode\u003eIterable[str]\u003c/code\u003e, matching the documented and runtime behavior of chunked request bodies. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3798\"\u003eurllib3/urllib3#3798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eLocationParseError\u003c/code\u003e when paths resembling schemeless URIs were passed to \u003ccode\u003eHTTPConnectionPool.urlopen()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3352\"\u003eurllib3/urllib3#3352\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eBaseHTTPResponse.readinto()\u003c/code\u003e type annotation to accept \u003ccode\u003ememoryview\u003c/code\u003e in addition to \u003ccode\u003ebytearray\u003c/code\u003e, matching the \u003ccode\u003eio.RawIOBase.readinto\u003c/code\u003e contract and enabling use with \u003ccode\u003eio.BufferedReader\u003c/code\u003e without type errors. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3764\"\u003eurllib3/urllib3#3764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.6.3\u003c/h2\u003e\n\u003ch2\u003e🚀 urllib3 is fundraising for HTTP/2 support\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support\"\u003eurllib3 is raising ~$40,000 USD\u003c/a\u003e to release HTTP/2 support and ensure long-term sustainable maintenance of the project after a sharp decline in financial support. If your company or organization uses Python and would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and thousands of other projects \u003ca href=\"https://opencollective.com/urllib3\"\u003eplease consider contributing financially\u003c/a\u003e to ensure HTTP/2 support is developed sustainably and maintained for the long-haul.\u003c/p\u003e\n\u003cp\u003eThank you for your support.\u003c/p\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a security issue where decompression-bomb safeguards of the streaming API were bypassed when HTTP redirects were followed. (CVE-2026-21441 reported by \u003ca href=\"https://github.com/D47A\"\u003e\u003ccode\u003e@​D47A\u003c/code\u003e\u003c/a\u003e, 8.9 High, GHSA-38jv-5279-wg99)\u003c/li\u003e\n\u003cli\u003eStarted treating \u003ccode\u003eRetry-After\u003c/code\u003e times greater than 6 hours as 6 hours by default. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3743\"\u003eurllib3/urllib3#3743\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eurllib3.connection.VerifiedHTTPSConnection\u003c/code\u003e on Emscripten. (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/3752\"\u003eurllib3/urllib3#3752\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.6.2\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/urllib3/urllib3/blob/main/CHANGES.rst\"\u003eurllib3's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.7.0 (2026-05-07)\u003c/h1\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cp\u003eAddressed high-severity security issues.\nImpact was limited to specific use cases detailed in the accompanying\nadvisories; overall user exposure was estimated to be marginal.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eDecompression-bomb safeguards of the streaming API were bypassed:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWhen \u003ccode\u003eHTTPResponse.drain_conn()\u003c/code\u003e was called after the response had been\nread and decompressed partially.\u003c/li\u003e\n\u003cli\u003eDuring the second \u003ccode\u003eHTTPResponse.read(amt=N)\u003c/code\u003e or\n\u003ccode\u003eHTTPResponse.stream(amt=N)\u003c/code\u003e call when the response was decompressed\nusing the official \u003ccode\u003eBrotli \u0026lt;https://pypi.org/project/brotli/\u0026gt;\u003c/code\u003e__ library.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eSee \u003ccode\u003eGHSA-mf9v-mfxr-j63j \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-mf9v-mfxr-j63j\u0026gt;\u003c/code\u003e__\nfor details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eHTTP pools created using \u003ccode\u003eProxyManager.connection_from_url\u003c/code\u003e did not strip\nsensitive headers specified in \u003ccode\u003eRetry.remove_headers_on_redirect\u003c/code\u003e when\nredirecting to a different host.\n(\u003ccode\u003eGHSA-qccp-gfcp-xxvc \u0026lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc\u0026gt;\u003c/code\u003e__)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUsed \u003ccode\u003eFutureWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\u003c/code\u003e for better\nvisibility of existing deprecation notices. Rescheduled the removal of\ndeprecated features to version 3.0.\n(\u003ccode\u003e[#3763](https://github.com/urllib3/urllib3/issues/3763) \u0026lt;https://github.com/urllib3/urllib3/issues/3763\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life Python 3.9.\n(\u003ccode\u003e[#3720](https://github.com/urllib3/urllib3/issues/3720) \u0026lt;https://github.com/urllib3/urllib3/issues/3720\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eRemoved support for end-of-life PyPy3.10.\n(\u003ccode\u003e[#4979](https://github.com/urllib3/urllib3/issues/4979) \u0026lt;https://github.com/urllib3/urllib3/issues/4979\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eBumped the minimum supported pyOpenSSL version to 19.0.0.\n(\u003ccode\u003e[#3777](https://github.com/urllib3/urllib3/issues/3777) \u0026lt;https://github.com/urllib3/urllib3/issues/3777\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read(amt=None)\u003c/code\u003e was ignoring decompressed\ndata buffered from previous partial reads.\n(\u003ccode\u003e[#3636](https://github.com/urllib3/urllib3/issues/3636) \u0026lt;https://github.com/urllib3/urllib3/issues/3636\u0026gt;\u003c/code\u003e__)\u003c/li\u003e\n\u003cli\u003eFixed a bug where \u003ccode\u003eHTTPResponse.read()\u003c/code\u003e could cache only part of the\nresponse after a partial read when \u003ccode\u003ecache_content=True\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/urllib3/urllib3/commit/9a950b92d999f906b6020bb2d1076ee56cddd5d2\"\u003e\u003ccode\u003e9a950b9\u003c/code\u003e\u003c/a\u003e Release 2.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/5ec0de499b9166ca71c65ab04f2a7e4eb0d66fcc\"\u003e\u003ccode\u003e5ec0de4\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/2bdcc44d1e163fb5cc48a8662425e35e15adfe6a\"\u003e\u003ccode\u003e2bdcc44\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/f45b0df09d8620ac6ed0491eb9362c8c87b7bc2c\"\u003e\u003ccode\u003ef45b0df\u003c/code\u003e\u003c/a\u003e Fix a misleading example for \u003ccode\u003eProxyManager\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4970\"\u003e#4970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/577193ca029872384f82c133449e0935f6d8a64b\"\u003e\u003ccode\u003e577193c\u003c/code\u003e\u003c/a\u003e Switch to nightly PyPy3.11 in CI for now (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4984\"\u003e#4984\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/e90af45bb006c3a452a3a21644a2681523f5c7fc\"\u003e\u003ccode\u003ee90af45\u003c/code\u003e\u003c/a\u003e Avoid infinite loop in \u003ccode\u003eHTTPResponse.read_chunked\u003c/code\u003e when \u003ccode\u003eamt=0\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4974\"\u003e#4974\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/67ed74fdaec6659a6534621ec8e3aaaa6f976210\"\u003e\u003ccode\u003e67ed74f\u003c/code\u003e\u003c/a\u003e Bump dev dependencies (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4972\"\u003e#4972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/3abd481097b54d87b574ac7ea593c3f40938a84d\"\u003e\u003ccode\u003e3abd481\u003c/code\u003e\u003c/a\u003e Upgrade mypy to version 1.20.2 (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4978\"\u003e#4978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/2b8725dfcac4f21d4d93cc0cc3a64a33af08f890\"\u003e\u003ccode\u003e2b8725d\u003c/code\u003e\u003c/a\u003e Drop support for EOL PyPy3.10 (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4979\"\u003e#4979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/urllib3/urllib3/commit/2944b2a0a6c573f5548a39cfd17196f98ee21b33\"\u003e\u003ccode\u003e2944b2a\u003c/code\u003e\u003c/a\u003e Upgrade \u003ccode\u003esetup-chrome\u003c/code\u003e and \u003ccode\u003esetup-firefox\u003c/code\u003e to fix warnings (\u003ca href=\"https://redirect.github.com/urllib3/urllib3/issues/4973\"\u003e#4973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/urllib3/urllib3/compare/2.5.0...2.7.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `virtualenv` from 20.35.4 to 20.36.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/virtualenv/releases\"\u003evirtualenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e20.36.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003erelease 20.35.3 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/virtualenv/pull/2981\"\u003epypa/virtualenv#2981\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Prevent NameError when accessing _DISTUTILS_PATCH during file ov… by \u003ca href=\"https://github.com/gracetyy\"\u003e\u003ccode\u003e@​gracetyy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2982\"\u003epypa/virtualenv#2982\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade pip and fix 3.15 picking old wheel by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2989\"\u003epypa/virtualenv#2989\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease 20.35.4 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/virtualenv/pull/2990\"\u003epypa/virtualenv#2990\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: wrong path on migrated venv by \u003ca href=\"https://github.com/sk1234567891\"\u003e\u003ccode\u003e@​sk1234567891\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2996\"\u003epypa/virtualenv#2996\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003etest_too_many_open_files: assert on \u003ccode\u003eerrno.EMFILE\u003c/code\u003e instead of \u003ccode\u003estrerror\u003c/code\u003e by \u003ca href=\"https://github.com/pltrz\"\u003e\u003ccode\u003e@​pltrz\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3001\"\u003epypa/virtualenv#3001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: update filelock dependency version to 3.20.1 to fix CVE CVE-2025-68146 by \u003ca href=\"https://github.com/pythonhubdev\"\u003e\u003ccode\u003e@​pythonhubdev\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3002\"\u003epypa/virtualenv#3002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: resolve EncodingWarning in tox upgrade environment 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/virtualenv/pull/3007\"\u003epypa/virtualenv#3007\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Interpreter discovery bug wrt. Microsoft Store shortcut using Latin-1 by \u003ca href=\"https://github.com/rahuldevikar\"\u003e\u003ccode\u003e@​rahuldevikar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3006\"\u003epypa/virtualenv#3006\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for PEP 440 version specifiers in the \u003ccode\u003e--python\u003c/code\u003e flag. by \u003ca href=\"https://github.com/rahuldevikar\"\u003e\u003ccode\u003e@​rahuldevikar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3008\"\u003epypa/virtualenv#3008\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/gracetyy\"\u003e\u003ccode\u003e@​gracetyy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2982\"\u003epypa/virtualenv#2982\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sk1234567891\"\u003e\u003ccode\u003e@​sk1234567891\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/2996\"\u003epypa/virtualenv#2996\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pltrz\"\u003e\u003ccode\u003e@​pltrz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3001\"\u003epypa/virtualenv#3001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pythonhubdev\"\u003e\u003ccode\u003e@​pythonhubdev\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3002\"\u003epypa/virtualenv#3002\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rahuldevikar\"\u003e\u003ccode\u003e@​rahuldevikar\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3006\"\u003epypa/virtualenv#3006\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/virtualenv/compare/20.35.3...20.36.0\"\u003ehttps://github.com/pypa/virtualenv/compare/20.35.3...20.36.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/pypa/virtualenv/blob/main/docs/changelog.rst\"\u003evirtualenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eBugfixes - 20.36.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU vulnerabilities in app_data and lock directory creation that could be exploited via symlink attacks -\nreported by :user:\u003ccode\u003etsigouris007\u003c/code\u003e, fixed by :user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e3013\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev20.36.0 (2026-01-07)\u003c/p\u003e\n\u003chr /\u003e\n\u003ch1\u003eFeatures - 20.36.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for PEP 440 version specifiers in the \u003ccode\u003e--python\u003c/code\u003e flag. Users can now specify Python versions using\noperators like \u003ccode\u003e\u0026gt;=\u003c/code\u003e, \u003ccode\u003e\u0026lt;=\u003c/code\u003e, \u003ccode\u003e~=\u003c/code\u003e, etc. For example: \u003ccode\u003evirtualenv --python=\u0026quot;\u0026gt;=3.12\u0026quot; myenv\u003c/code\u003e \u003ccode\u003e. (:issue:\u003c/code\u003e2994`)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev20.35.4 (2025-10-28)\u003c/p\u003e\n\u003chr /\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/virtualenv/commit/d0ad11d1146e81ea74d2461be9653f1da9cf3fd1\"\u003e\u003ccode\u003ed0ad11d\u003c/code\u003e\u003c/a\u003e release 20.36.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/dec4cec5d16edaf83a00a658f32d1e032661cebc\"\u003e\u003ccode\u003edec4cec\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3013\"\u003e#3013\u003c/a\u003e from gaborbernat/fix-sec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/5fe5d38beb1273b489591a7b444f1018af2edf0a\"\u003e\u003ccode\u003e5fe5d38\u003c/code\u003e\u003c/a\u003e release 20.36.0 (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3011\"\u003e#3011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/9719376addaa710b61d9ed013774fa26f6224b4e\"\u003e\u003ccode\u003e9719376\u003c/code\u003e\u003c/a\u003e release 20.36.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/0276db6fcf8849c519d75465f659b12aefb2acd8\"\u003e\u003ccode\u003e0276db6\u003c/code\u003e\u003c/a\u003e Add support for PEP 440 version specifiers in the \u003ccode\u003e--python\u003c/code\u003e flag. (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3008\"\u003e#3008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/4f900c29044e17812981b5b98ddce45604858b7f\"\u003e\u003ccode\u003e4f900c2\u003c/code\u003e\u003c/a\u003e Fix Interpreter discovery bug wrt. Microsoft Store shortcut using Latin-1 (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/13afcc62a3444d0386c8031d0a62277a8274ab07\"\u003e\u003ccode\u003e13afcc6\u003c/code\u003e\u003c/a\u003e fix: resolve EncodingWarning in tox upgrade environment (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3007\"\u003e#3007\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/31b5d31581df3e3a7bbc55e52568b26dd01b0d57\"\u003e\u003ccode\u003e31b5d31\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/2997\"\u003e#2997\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/7c284221b4751388801355fc6ebaa2abe60427bd\"\u003e\u003ccode\u003e7c28422\u003c/code\u003e\u003c/a\u003e fix: update filelock dependency version to 3.20.1 to fix CVE CVE-2025-68146 (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/365628c544cd5498fbf0a3b6c6a8c1f41d25a749\"\u003e\u003ccode\u003e365628c\u003c/code\u003e\u003c/a\u003e test_too_many_open_files: assert on \u003ccode\u003eerrno.EMFILE\u003c/code\u003e instead of \u003ccode\u003estrerror\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/virtualenv/compare/20.35.4...20.36.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\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/EagleZhen/another-cuhk-course-planner/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/EagleZhen/another-cuhk-course-planner/pull/134","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/EagleZhen%2Fanother-cuhk-course-planner/issues/134","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/134/packages"}},{"old_version":"3.29.4","new_version":"3.29.5","update_type":"patch","path":null,"pr_created_at":"2026-07-03T08:46:21.000Z","version_change":"3.29.4 → 3.29.5","issue":{"uuid":"4801935960","node_id":"PR_kwDOTA0-sc7tgZbO","number":89,"state":"closed","title":"Bump filelock from 3.29.4 to 3.29.5","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-03T08:46:30.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-03T08:46:21.000Z","updated_at":"2026-07-03T08:46:37.000Z","time_to_close":9,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"filelock","old_version":"3.29.4","new_version":"3.29.5","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.29.4 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\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/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.29.4...3.29.5\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.29.4\u0026new-version=3.29.5)](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/goutambomma24/docker-assessment/pull/89","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/goutambomma24%2Fdocker-assessment/issues/89","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/89/packages"}},{"old_version":"3.19.1","new_version":"3.20.3","update_type":"minor","path":null,"pr_created_at":"2026-07-02T01:51:14.000Z","version_change":"3.19.1 → 3.20.3","issue":{"uuid":"4790544564","node_id":"PR_kwDON5W1Ac7s7T52","number":45,"state":"closed","title":"chore(deps): bump the uv group across 1 directory with 8 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-02T09:59:53.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-02T01:51:14.000Z","updated_at":"2026-07-02T10:00:03.000Z","time_to_close":29319,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv","update_count":8,"packages":[{"name":"gradio","old_version":"5.17.1","new_version":"6.15.0","repository_url":"https://github.com/gradio-app/gradio"},{"name":"filelock","old_version":"3.19.1","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"orjson","old_version":"3.11.5","new_version":"3.11.6","repository_url":"https://github.com/ijl/orjson"},{"name":"pillow","old_version":"11.3.0","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"python-multipart","old_version":"0.0.20","new_version":"0.0.31","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"starlette","old_version":"0.49.3","new_version":"1.3.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 8 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [gradio](https://github.com/gradio-app/gradio) | `5.17.1` | `6.15.0` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.19.1` | `3.20.3` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.5` | `3.11.6` |\n| [pillow](https://github.com/python-pillow/Pillow) | `11.3.0` | `12.2.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.20` | `0.0.31` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [starlette](https://github.com/Kludex/starlette) | `0.49.3` | `1.3.1` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n\n\nUpdates `gradio` from 5.17.1 to 6.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gradio-app/gradio/releases\"\u003egradio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egradio@6.15.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13322\"\u003e#13322\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6c48f80948abb330f201d0dac38f89a276348029\"\u003e\u003ccode\u003e6c48f80\u003c/code\u003e\u003c/a\u003e - Allow applying \u003ccode\u003egr.cache()\u003c/code\u003e to intermediate functions directly.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13367\"\u003e#13367\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5d9c9fe5ff32951309765d37da610a4833b4b694\"\u003e\u003ccode\u003e5d9c9fe\u003c/code\u003e\u003c/a\u003e - fix: upgrade handlebars to 4.7.9 (CVE-2026-33937).  Thanks \u003ca href=\"https://github.com/orbisai0security\"\u003e\u003ccode\u003e@​orbisai0security\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13408\"\u003e#13408\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6b0c8aff7a9688ad605e4ca52a083c5754fe1610\"\u003e\u003ccode\u003e6b0c8af\u003c/code\u003e\u003c/a\u003e - Markdown link fix.  Thanks \u003ca href=\"https://github.com/dawoodkhan82\"\u003e\u003ccode\u003e@​dawoodkhan82\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13366\"\u003e#13366\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/10f43e0fe187aac9594f3a9765f8addc81b63ad1\"\u003e\u003ccode\u003e10f43e0\u003c/code\u003e\u003c/a\u003e - Offload traffic to static workers and use node as the proxy.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\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\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13384\"\u003e#13384\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/feb7237d01f359d2ad4ee42d00344e61692b3b39\"\u003e\u003ccode\u003efeb7237\u003c/code\u003e\u003c/a\u003e - Isolate cookie jars in \u003ccode\u003e/proxy=\u003c/code\u003e requests so a malicious upstream Space cannot leak cookies into proxied requests to a different \u003ccode\u003e*.hf.space\u003c/code\u003e (GHSA-2mr9-9r47-px2g).  Thanks \u003ca href=\"https://github.com/xr843\"\u003e\u003ccode\u003e@​xr843\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13344\"\u003e#13344\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/563e7b7948ba2da9d900065c69301ab349648cb0\"\u003e\u003ccode\u003e563e7b7\u003c/code\u003e\u003c/a\u003e - Stop \u003ca href=\"https://github.com/gr\"\u003e\u003ccode\u003e@​gr\u003c/code\u003e\u003c/a\u003e.render from crashing with KeyError when an inner gr.Examples pops its fake-event fn.  Thanks \u003ca href=\"https://github.com/GopalGB\"\u003e\u003ccode\u003e@​GopalGB\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13379\"\u003e#13379\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/b8e8745d2f4fb156dd12d57a3f4eb2e165f20216\"\u003e\u003ccode\u003eb8e8745\u003c/code\u003e\u003c/a\u003e - fix default tool logic in gr.ImageEditor.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13363\"\u003e#13363\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0872f5eccad07a140ed5e24e3adddc661667ff9a\"\u003e\u003ccode\u003e0872f5e\u003c/code\u003e\u003c/a\u003e - add colour picker unit tests.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13383\"\u003e#13383\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/9acecd2d69653e7d0f7961fa1b63a172a9ae76ec\"\u003e\u003ccode\u003e9acecd2\u003c/code\u003e\u003c/a\u003e - Warn when gr.Tabs() has non-Tab direct children (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/9832\"\u003e#9832\u003c/a\u003e).  Thanks \u003ca href=\"https://github.com/wjddnwp29\"\u003e\u003ccode\u003e@​wjddnwp29\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13403\"\u003e#13403\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/df56862a1531fc372a3248716dc4bd07e6db1c52\"\u003e\u003ccode\u003edf56862\u003c/code\u003e\u003c/a\u003e - [js-client] close submit iterator on next/close race.  Thanks \u003ca href=\"https://github.com/hysts\"\u003e\u003ccode\u003e@​hysts\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13380\"\u003e#13380\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5d7a9bae2698c792db867f2b689fd91cee8bf4a5\"\u003e\u003ccode\u003e5d7a9ba\u003c/code\u003e\u003c/a\u003e - update pypi prompt.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13390\"\u003e#13390\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/d86903eaa5628ca0b30f27b87ec1d7e194b3eff6\"\u003e\u003ccode\u003ed86903e\u003c/code\u003e\u003c/a\u003e - Add Estonian language support and translation.  Thanks \u003ca href=\"https://github.com/paulpall\"\u003e\u003ccode\u003e@​paulpall\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13336\"\u003e#13336\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/14c88701756c5fa57e8eaeac4df1385b9601da45\"\u003e\u003ccode\u003e14c8870\u003c/code\u003e\u003c/a\u003e - Add UploadButton unit tests.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13360\"\u003e#13360\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/2887302069b2d33429ead157e7699d5502e29e0a\"\u003e\u003ccode\u003e2887302\u003c/code\u003e\u003c/a\u003e - [codex] fix component load event target.  Thanks \u003ca href=\"https://github.com/thomwolf\"\u003e\u003ccode\u003e@​thomwolf\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/gradio-app/gradio/blob/main/CHANGELOG.md\"\u003egradio's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.15.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13322\"\u003e#13322\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6c48f80948abb330f201d0dac38f89a276348029\"\u003e\u003ccode\u003e6c48f80\u003c/code\u003e\u003c/a\u003e - Allow applying \u003ccode\u003egr.cache()\u003c/code\u003e to intermediate functions directly.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13367\"\u003e#13367\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5d9c9fe5ff32951309765d37da610a4833b4b694\"\u003e\u003ccode\u003e5d9c9fe\u003c/code\u003e\u003c/a\u003e - fix: upgrade handlebars to 4.7.9 (CVE-2026-33937).  Thanks \u003ca href=\"https://github.com/orbisai0security\"\u003e\u003ccode\u003e@​orbisai0security\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13408\"\u003e#13408\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6b0c8aff7a9688ad605e4ca52a083c5754fe1610\"\u003e\u003ccode\u003e6b0c8af\u003c/code\u003e\u003c/a\u003e - Markdown link fix.  Thanks \u003ca href=\"https://github.com/dawoodkhan82\"\u003e\u003ccode\u003e@​dawoodkhan82\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13366\"\u003e#13366\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/10f43e0fe187aac9594f3a9765f8addc81b63ad1\"\u003e\u003ccode\u003e10f43e0\u003c/code\u003e\u003c/a\u003e - Offload traffic to static workers and use node as the proxy.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\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\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13384\"\u003e#13384\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/feb7237d01f359d2ad4ee42d00344e61692b3b39\"\u003e\u003ccode\u003efeb7237\u003c/code\u003e\u003c/a\u003e - Isolate cookie jars in \u003ccode\u003e/proxy=\u003c/code\u003e requests so a malicious upstream Space cannot leak cookies into proxied requests to a different \u003ccode\u003e*.hf.space\u003c/code\u003e (GHSA-2mr9-9r47-px2g).  Thanks \u003ca href=\"https://github.com/xr843\"\u003e\u003ccode\u003e@​xr843\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13344\"\u003e#13344\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/563e7b7948ba2da9d900065c69301ab349648cb0\"\u003e\u003ccode\u003e563e7b7\u003c/code\u003e\u003c/a\u003e - Stop \u003ca href=\"https://github.com/gr\"\u003e\u003ccode\u003e@​gr\u003c/code\u003e\u003c/a\u003e.render from crashing with KeyError when an inner gr.Examples pops its fake-event fn.  Thanks \u003ca href=\"https://github.com/GopalGB\"\u003e\u003ccode\u003e@​GopalGB\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13379\"\u003e#13379\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/b8e8745d2f4fb156dd12d57a3f4eb2e165f20216\"\u003e\u003ccode\u003eb8e8745\u003c/code\u003e\u003c/a\u003e - fix default tool logic in gr.ImageEditor.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13363\"\u003e#13363\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0872f5eccad07a140ed5e24e3adddc661667ff9a\"\u003e\u003ccode\u003e0872f5e\u003c/code\u003e\u003c/a\u003e - add colour picker unit tests.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13383\"\u003e#13383\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/9acecd2d69653e7d0f7961fa1b63a172a9ae76ec\"\u003e\u003ccode\u003e9acecd2\u003c/code\u003e\u003c/a\u003e - Warn when gr.Tabs() has non-Tab direct children (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/9832\"\u003e#9832\u003c/a\u003e).  Thanks \u003ca href=\"https://github.com/wjddnwp29\"\u003e\u003ccode\u003e@​wjddnwp29\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13403\"\u003e#13403\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/df56862a1531fc372a3248716dc4bd07e6db1c52\"\u003e\u003ccode\u003edf56862\u003c/code\u003e\u003c/a\u003e - [js-client] close submit iterator on next/close race.  Thanks \u003ca href=\"https://github.com/hysts\"\u003e\u003ccode\u003e@​hysts\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13380\"\u003e#13380\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5d7a9bae2698c792db867f2b689fd91cee8bf4a5\"\u003e\u003ccode\u003e5d7a9ba\u003c/code\u003e\u003c/a\u003e - update pypi prompt.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13390\"\u003e#13390\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/d86903eaa5628ca0b30f27b87ec1d7e194b3eff6\"\u003e\u003ccode\u003ed86903e\u003c/code\u003e\u003c/a\u003e - Add Estonian language support and translation.  Thanks \u003ca href=\"https://github.com/paulpall\"\u003e\u003ccode\u003e@​paulpall\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13336\"\u003e#13336\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/14c88701756c5fa57e8eaeac4df1385b9601da45\"\u003e\u003ccode\u003e14c8870\u003c/code\u003e\u003c/a\u003e - Add UploadButton unit tests.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13360\"\u003e#13360\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/2887302069b2d33429ead157e7699d5502e29e0a\"\u003e\u003ccode\u003e2887302\u003c/code\u003e\u003c/a\u003e - [codex] fix component load event target.  Thanks \u003ca href=\"https://github.com/thomwolf\"\u003e\u003ccode\u003e@​thomwolf\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.14.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13275\"\u003e#13275\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/2d025c56cffb5c4eecbe47515ec771b5ecf46611\"\u003e\u003ccode\u003e2d025c5\u003c/code\u003e\u003c/a\u003e - Model3D Unit Tests.  Thanks \u003ca href=\"https://github.com/dawoodkhan82\"\u003e\u003ccode\u003e@​dawoodkhan82\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13258\"\u003e#13258\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0d089260e1f17dc0bbed85f38029f75e657782b4\"\u003e\u003ccode\u003e0d08926\u003c/code\u003e\u003c/a\u003e - add theme designer skill.  Thanks \u003ca href=\"https://github.com/hannahblair\"\u003e\u003ccode\u003e@​hannahblair\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\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13324\"\u003e#13324\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0453450409ce6412382f8c6e5a4b5e973d80f8b8\"\u003e\u003ccode\u003e0453450\u003c/code\u003e\u003c/a\u003e - Fix gr.Slider crash for zero-width ranges.  Thanks \u003ca href=\"https://github.com/onthebed\"\u003e\u003ccode\u003e@​onthebed\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13264\"\u003e#13264\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/f65acd0f24c9b6b593b9835c7ae46282f52fdc9d\"\u003e\u003ccode\u003ef65acd0\u003c/code\u003e\u003c/a\u003e - Dialogue component unit tests.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13333\"\u003e#13333\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/0e3c48549fdf4aeaff3a2f098c1d23420e4814c5\"\u003e\u003ccode\u003e0e3c485\u003c/code\u003e\u003c/a\u003e - Remove Event From Queue When Cancelled.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13326\"\u003e#13326\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/d42a1d72ad56b5155acdb4ff3bcbe7bceab39bfb\"\u003e\u003ccode\u003ed42a1d7\u003c/code\u003e\u003c/a\u003e - Fix incorrect description of js parameter in Blocks.load.  Thanks \u003ca href=\"https://github.com/AryaLolusare2712\"\u003e\u003ccode\u003e@​AryaLolusare2712\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13335\"\u003e#13335\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/953efe06fa6d0742a9dd899b846d45fbc6ea3ccf\"\u003e\u003ccode\u003e953efe0\u003c/code\u003e\u003c/a\u003e - Prevent Gallery Select Event From Triggering When Value Updated Programmatically.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.13.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13248\"\u003e#13248\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/30264b5f1e228b7b5a077cbd839c05f32e29297d\"\u003e\u003ccode\u003e30264b5\u003c/code\u003e\u003c/a\u003e - docs: Add \u0026quot;Common Patterns\u0026quot; section to Textbox component docs.  Thanks \u003ca href=\"https://github.com/yuzegong746-cmd\"\u003e\u003ccode\u003e@​yuzegong746-cmd\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13266\"\u003e#13266\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/6809249801772cc9db0042eac9559b1b363bbcb9\"\u003e\u003ccode\u003e6809249\u003c/code\u003e\u003c/a\u003e - Fix typo in \u003ccode\u003eRequest.state\u003c/code\u003e serialization.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13289\"\u003e#13289\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/d6f24df6233e7882746ba6e49307a34a11101ea1\"\u003e\u003ccode\u003ed6f24df\u003c/code\u003e\u003c/a\u003e - Improve curl info.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13252\"\u003e#13252\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/e39f0284582bbac93fd01b2a5eae4ecae219f252\"\u003e\u003ccode\u003ee39f028\u003c/code\u003e\u003c/a\u003e - Add ImageSlider unit tests.  Thanks \u003ca href=\"https://github.com/pngwn\"\u003e\u003ccode\u003e@​pngwn\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13262\"\u003e#13262\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/b6b0d02bfab966e9b560402d3b7fb159d8692cea\"\u003e\u003ccode\u003eb6b0d02\u003c/code\u003e\u003c/a\u003e - Fix batched queue events losing request context.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13267\"\u003e#13267\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/5fd7698f16f6cdfefb7e010b03fce60583d50214\"\u003e\u003ccode\u003e5fd7698\u003c/code\u003e\u003c/a\u003e - Fix timing and TTL comparisons bugs.  Thanks \u003ca href=\"https://github.com/abidlabs\"\u003e\u003ccode\u003e@​abidlabs\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13277\"\u003e#13277\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/cab8be062deb958a718aae25175e07fb013dfd4f\"\u003e\u003ccode\u003ecab8be0\u003c/code\u003e\u003c/a\u003e - CLI/Agent API Docs.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13265\"\u003e#13265\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/8b47ccbf168d0ea721088a52fb9789c4339e7f2f\"\u003e\u003ccode\u003e8b47ccb\u003c/code\u003e\u003c/a\u003e - Skills Reorg + sync to huggingface/skills.  Thanks \u003ca href=\"https://github.com/freddyaboulton\"\u003e\u003ccode\u003e@​freddyaboulton\u003c/code\u003e\u003c/a\u003e!\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/gradio-app/gradio/pull/13286\"\u003e#13286\u003c/a\u003e \u003ca href=\"https://github.com/gradio-app/gradio/commit/948fcb89508c1e059bd9b761f2384afcea9481af\"\u003e\u003ccode\u003e948fcb8\u003c/code\u003e\u003c/a\u003e - fix(reloading): copy \u003ccode\u003eserver\u003c/code\u003e attr before swapping blocks.  Thanks \u003ca href=\"https://github.com/cbensimon\"\u003e\u003ccode\u003e@​cbensimon\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/gradio-app/gradio/commit/0528c2c0e2c7080eeb5133f4c87b1bb38184ba47\"\u003e\u003ccode\u003e0528c2c\u003c/code\u003e\u003c/a\u003e chore: update versions (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13352\"\u003e#13352\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/6a0b417e0de228f28509c96967f165596f2b4e9f\"\u003e\u003ccode\u003e6a0b417\u003c/code\u003e\u003c/a\u003e Stabilize image editor examples test (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13418\"\u003e#13418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/51497ae8e5bab0ff5731d16df4148a024224cdf1\"\u003e\u003ccode\u003e51497ae\u003c/code\u003e\u003c/a\u003e docs: add MiniMax example to ChatInterface providers guide (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13411\"\u003e#13411\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/9acecd2d69653e7d0f7961fa1b63a172a9ae76ec\"\u003e\u003ccode\u003e9acecd2\u003c/code\u003e\u003c/a\u003e Warn when gr.Tabs() has non-Tab direct children (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/9832\"\u003e#9832\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13383\"\u003e#13383\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/6b0c8aff7a9688ad605e4ca52a083c5754fe1610\"\u003e\u003ccode\u003e6b0c8af\u003c/code\u003e\u003c/a\u003e Markdown link fix (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13408\"\u003e#13408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/df56862a1531fc372a3248716dc4bd07e6db1c52\"\u003e\u003ccode\u003edf56862\u003c/code\u003e\u003c/a\u003e [js-client] close submit iterator on next/close race (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13403\"\u003e#13403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/1cbeb4f07e8f53f0167e7072d8a45b7de09b9da2\"\u003e\u003ccode\u003e1cbeb4f\u003c/code\u003e\u003c/a\u003e Ci previews cdn (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13410\"\u003e#13410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/0fbdc4965bbbd649c23f0e94d085cb57c7d63438\"\u003e\u003ccode\u003e0fbdc49\u003c/code\u003e\u003c/a\u003e JS client cdn preview (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13409\"\u003e#13409\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/14c88701756c5fa57e8eaeac4df1385b9601da45\"\u003e\u003ccode\u003e14c8870\u003c/code\u003e\u003c/a\u003e Add UploadButton unit tests (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13336\"\u003e#13336\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/gradio-app/gradio/commit/10f43e0fe187aac9594f3a9765f8addc81b63ad1\"\u003e\u003ccode\u003e10f43e0\u003c/code\u003e\u003c/a\u003e Offload traffic to static workers and use node as the proxy (\u003ca href=\"https://redirect.github.com/gradio-app/gradio/issues/13366\"\u003e#13366\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/gradio-app/gradio/compare/gradio@5.17.1...gradio@6.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.19.1 to 3.20.3\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Unix systems without O_NOFOLLOW by \u003ca href=\"https://github.com/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/464\"\u003etox-dev/filelock#464\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/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\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.20.1...3.20.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.1...3.20.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2025-68146: Fix TOCTOU symlink vulnerability in lock file creation 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/461\"\u003etox-dev/filelock#461\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.20.0...3.20.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.0...3.20.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd tox.toml to sdist by \u003ca href=\"https://github.com/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/436\"\u003etox-dev/filelock#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate docs with example by \u003ca href=\"https://github.com/znichollscr\"\u003e\u003ccode\u003e@​znichollscr\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/438\"\u003etox-dev/filelock#438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd 3.14 support and drop 3.9 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/448\"\u003etox-dev/filelock#448\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/mtelka\"\u003e\u003ccode\u003e@​mtelka\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/436\"\u003etox-dev/filelock#436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/znichollscr\"\u003e\u003ccode\u003e@​znichollscr\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/438\"\u003etox-dev/filelock#438\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.19.1...3.20.0\"\u003ehttps://github.com/tox-dev/filelock/compare/3.19.1...3.20.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2e7d4046b6a2b375a573bcfbad21827b99f8939\"\u003e\u003ccode\u003ef2e7d40\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/50888548eb2f008d372e71f2835a47851ab83836\"\u003e\u003ccode\u003e5088854\u003c/code\u003e\u003c/a\u003e Support Unix systems without O_NOFOLLOW (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/377f62251d7cdf30768cc9ee1eb31cea1551c71b\"\u003e\u003ccode\u003e377f622\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/460\"\u003e#460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/4724d7f8c3393ec1f048c93933e6e3e6ec321f0e\"\u003e\u003ccode\u003e4724d7f\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in lock file creation (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/461\"\u003e#461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/cb69414a2327cf0a9887e12054d1dc112ee700af\"\u003e\u003ccode\u003ecb69414\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/459\"\u003e#459\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/0769294f14a6c62eea64741722f7acef5386b4cd\"\u003e\u003ccode\u003e0769294\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 6 to 7 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/458\"\u003e#458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/414193a188892bd376eb5c56eb45a9cf8ecc9284\"\u003e\u003ccode\u003e414193a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/457\"\u003e#457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/1456797beb94ad59e5627462ad29f7ed3a966626\"\u003e\u003ccode\u003e1456797\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/456\"\u003e#456\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/8d6bf90af313ac7fd6e41ef2b715d91dd6858f5c\"\u003e\u003ccode\u003e8d6bf90\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 5 to 6 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/455\"\u003e#455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.19.1...3.20.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `orjson` from 3.11.5 to 3.11.6\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.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\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/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.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\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/ijl/orjson/commit/ec02024c3837255064f248c0d2d331319b75e9ad\"\u003e\u003ccode\u003eec02024\u003c/code\u003e\u003c/a\u003e 3.11.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/d58168733189f82b3fd0c058dff73e05d09202e6\"\u003e\u003ccode\u003ed581687\u003c/code\u003e\u003c/a\u003e build, clippy misc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/4105b29b2275f200f6fae01349bef02ccf1bc2e2\"\u003e\u003ccode\u003e4105b29\u003c/code\u003e\u003c/a\u003e writer::num\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/62bb185b70785ded49c79c26f8c9781f1e6fe370\"\u003e\u003ccode\u003e62bb185\u003c/code\u003e\u003c/a\u003e Fix sporadic crash on serializing object close\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/d860078a973f44401265c5c4ad12a7dbe4f839ad\"\u003e\u003ccode\u003ed860078\u003c/code\u003e\u003c/a\u003e PyRef idiom refactors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/343ae2f148197918aba9f8562db42c364620e4b8\"\u003e\u003ccode\u003e343ae2f\u003c/code\u003e\u003c/a\u003e Deserializer, Utf8Buffer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/7835f58d1c56947d1cf7a18acdfc07a2bca9b0f2\"\u003e\u003ccode\u003e7835f58\u003c/code\u003e\u003c/a\u003e PyBytesRef and other input refactor\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/71e0516424ce1e11613eb1780f18e8cde83989fd\"\u003e\u003ccode\u003e71e0516\u003c/code\u003e\u003c/a\u003e PyStrRef\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/1096df42dc585fde837ed0c930a346f5ef7dbb94\"\u003e\u003ccode\u003e1096df4\u003c/code\u003e\u003c/a\u003e MSRV 1.89\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ijl/orjson/commit/b718e75b8ba18a707c2b44b6de14d52547573771\"\u003e\u003ccode\u003eb718e75\u003c/code\u003e\u003c/a\u003e Drop support for python3.9\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ijl/orjson/compare/3.11.5...3.11.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pillow` from 11.3.0 to 12.2.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.2.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html\"\u003ehttps://pillow.readthedocs.io/en/stable/releasenotes/12.2.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eDocumentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate 12.2.0 release notes \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9522\"\u003e#9522\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd loader plugins: AMOS abk, Atari Degas, 40+ more obscure formats via Netpbm \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9482\"\u003e#9482\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Python versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9515\"\u003e#9515\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eJeffrey A. Clark -\u0026gt; Jeffrey 'Alex' Clark \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9513\"\u003e#9513\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 release notes for \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9394\"\u003e#9394\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9419\"\u003e#9419\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9456\"\u003e#9456\u003c/a\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9467\"\u003e#9467\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 Amiga Workbench .info loader to 3rd party plugins list \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9459\"\u003e#9459\u003c/a\u003e [\u003ca href=\"https://github.com/bitplane\"\u003e\u003ccode\u003e@​bitplane\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMerge PFM documentation into PPM \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9434\"\u003e#9434\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 macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9431\"\u003e#9431\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eFix CVE number \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9430\"\u003e#9430\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\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 xz to 5.8.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9523\"\u003e#9523\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 libjpeg-turbo to 3.1.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9507\"\u003e#9507\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 libpng to 1.6.56 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9499\"\u003e#9499\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 freetype to 2.14.3 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9485\"\u003e#9485\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libavif to 1.4.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9479\"\u003e#9479\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated harfbuzz to 13.2.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9461\"\u003e#9461\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 Ghostscript to 10.7.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9469\"\u003e#9469\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 harfbuzz to 13.0.1 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9453\"\u003e#9453\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 libavif to 1.4.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9460\"\u003e#9460\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 freetype to 2.14.2 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9449\"\u003e#9449\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 actions/download-artifact action to v8 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9451\"\u003e#9451\u003c/a\u003e [@\u003ca href=\"https://github.com/apps/renovate\"\u003erenovate[bot]\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdated libpng to 1.6.55 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9425\"\u003e#9425\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\u003eTesting\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCleanup .spider extension in the same test where it is added \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9517\"\u003e#9517\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eRun tests in parallel via tox for 3.5x speedup \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9516\"\u003e#9516\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eEnable colour in CI logs \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9486\"\u003e#9486\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate Ghostscript to 10.7.0 \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9469\"\u003e#9469\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eSimplify TGA test code \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9477\"\u003e#9477\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 tests to check for ValueError when encoding an empty image \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9464\"\u003e#9464\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpgrade CI from \u003ccode\u003emacos-15-intel\u003c/code\u003e to \u003ccode\u003emacos-26-intel\u003c/code\u003e \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9454\"\u003e#9454\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eAdd check-case-conflict hook \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9446\"\u003e#9446\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eSpecify platform when pulling docker image \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9440\"\u003e#9440\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eGHA: Cache libavif and webp builds for Ubuntu \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9437\"\u003e#9437\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eUpdate macOS tested Pillow versions \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9431\"\u003e#9431\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\u003eOther changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck calloc return value \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9527\"\u003e#9527\u003c/a\u003e [\u003ca href=\"https://github.com/radarhere\"\u003e\u003ccode\u003e@​radarhere\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eCheck all allocs in the Arrow tree \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9488\"\u003e#9488\u003c/a\u003e [\u003ca href=\"https://github.com/wiredfool\"\u003e\u003ccode\u003e@​wiredfool\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eReject non-numeric elements inside list coords \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9526\"\u003e#9526\u003c/a\u003e [\u003ca href=\"https://github.com/hugovk\"\u003e\u003ccode\u003e@​hugovk\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eMove variable declaration inside define \u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9525\"\u003e#9525\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/3c41c095064200a02672d89cc5ff629eaf4b0d4f\"\u003e\u003ccode\u003e3c41c09\u003c/code\u003e\u003c/a\u003e 12.2.0 version bump\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/cdaa29eb520291c4f1fb50fb71ae46502d41e460\"\u003e\u003ccode\u003ecdaa29e\u003c/code\u003e\u003c/a\u003e Check calloc return value (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9527\"\u003e#9527\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/585b2f5a780722c8a5bfffb3a40f7f42e8a205be\"\u003e\u003ccode\u003e585b2f5\u003c/code\u003e\u003c/a\u003e Check calloc return value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ecf011ea15991d4cebacd946e58270cc30b0f2c1\"\u003e\u003ccode\u003eecf011e\u003c/code\u003e\u003c/a\u003e Check all allocs in the Arrow tree (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9488\"\u003e#9488\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/cf6de8ca9b23e714aa5310e1c791eda66fc0b670\"\u003e\u003ccode\u003ecf6de8c\u003c/code\u003e\u003c/a\u003e Reject non-numeric elements inside list coords (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9526\"\u003e#9526\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/ffdcede6516b28d9667c92929854023d17048b64\"\u003e\u003ccode\u003effdcede\u003c/code\u003e\u003c/a\u003e Update 12.2.0 release notes (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9522\"\u003e#9522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/7929d7760fe5a307ba5ae6eabdf70ae4486b147c\"\u003e\u003ccode\u003e7929d77\u003c/code\u003e\u003c/a\u003e Added security release notes (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/149\"\u003e#149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/c4f7aa5dfb4dbd1242978ac235e01b9934ec6d3c\"\u003e\u003ccode\u003ec4f7aa5\u003c/code\u003e\u003c/a\u003e Added security release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/22cdb5f2e4b15250c06563b1124ac1667342712f\"\u003e\u003ccode\u003e22cdb5f\u003c/code\u003e\u003c/a\u003e Move variable declaration inside define (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9525\"\u003e#9525\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-pillow/Pillow/commit/fc15b3b01899408ec989d7804c5283e13802d057\"\u003e\u003ccode\u003efc15b3b\u003c/code\u003e\u003c/a\u003e Resize tall images vertically first (\u003ca href=\"https://redirect.github.com/python-pillow/Pillow/issues/9524\"\u003e#9524\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-pillow/Pillow/compare/11.3.0...12.2.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.20 to 0.0.31\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.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch 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/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating 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/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form 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/297\"\u003eKludex/python-multipart#297\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.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator 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/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\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/291\"\u003eKludex/python-multipart#291\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.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.29\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/manunio\"\u003e\u003ccode\u003e@​manunio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003eKludex/python-multipart#270\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.28...0.0.29\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.28...0.0.29\u003c/a\u003e\u003c/p\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\u003ch2\u003eVersion 0.0.27\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePass parse offsets via constructors 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/268\"\u003eKludex/python-multipart#268\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd multipart header limits 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/267\"\u003eKludex/python-multipart#267\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.26...0.0.27\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.26...0.0.27\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.26\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before first multipart boundary 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/262\"\u003eKludex/python-multipart#262\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing boundary 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/259\"\u003eKludex/python-multipart#259\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.25...0.0.26\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.25...0.0.26\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.25\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eApply Apache-2.0 properly 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/247\"\u003eKludex/python-multipart#247\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle multipart headers case-insensitively 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/252\"\u003eKludex/python-multipart#252\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/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.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.29 (2026-05-17)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003e#270\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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\u003ch2\u003e0.0.27 (2026-04-27)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd multipart header limits \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/267\"\u003e#267\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003ePass parse offsets via constructors \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/268\"\u003e#268\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.26 (2026-04-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSkip preamble before the first multipart boundary more efficiently \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/262\"\u003e#262\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eSilently discard epilogue data after the closing multipart boundary \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/259\"\u003e#259\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.25 (2026-04-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd MIME content type info to \u003ccode\u003eFile\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/143\"\u003e#143\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eHandle CTE values case-insensitively \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/258\"\u003e#258\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eRemove custom \u003ccode\u003eFormParser\u003c/code\u003e classes \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/257\"\u003e#257\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eUPLOAD_DELETE_TMP\u003c/code\u003e to \u003ccode\u003eFormParser\u003c/code\u003e config \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/254\"\u003e#254\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eEmit \u003ccode\u003efield_end\u003c/code\u003e for trailing bare field names on finalize \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/230\"\u003e#230\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eHandle multipart headers case-insensitively \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/252\"\u003e#252\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eApply Apache-2.0 properly \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/247\"\u003e#247\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.24 (2026-04-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate \u003ccode\u003echunk_size\u003c/code\u003e in \u003ccode\u003eparse_form()\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/244\"\u003e#244\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.23 (2026-04-05)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove unused \u003ccode\u003etrust_x_headers\u003c/code\u003e parameter and \u003ccode\u003eX-File-Name\u003c/code\u003e fallback \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/196\"\u003e#196\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eReturn processed length from \u003ccode\u003eQuerystringParser._internal_write\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/229\"\u003e#229\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eCleanup metadata dunders from \u003ccode\u003e__init__.py\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/227\"\u003e#227\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/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/9d3ead568a259f222cff6425262ff63e88d930d4\"\u003e\u003ccode\u003e9d3ead5\u003c/code\u003e\u003c/a\u003e Version 0.0.30 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/292\"\u003e#292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/3506c15ce99cb62faf2d5ceb3c4c1e5800cb843d\"\u003e\u003ccode\u003e3506c15\u003c/code\u003e\u003c/a\u003e Ignore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/291\"\u003e#291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/d69df35cd2cad9c72794c2c340db646afae957d8\"\u003e\u003ccode\u003ed69df35\u003c/code\u003e\u003c/a\u003e Treat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/1e6ff9740b09fb439755f30e2b0e2ada1d297325\"\u003e\u003ccode\u003e1e6ff97\u003c/code\u003e\u003c/a\u003e Bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.20...0.0.31\"\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.33.0\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.33.0\u003c/h2\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that uses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report any gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts contents to a non-deterministic location to prevent malicious file replacement. This does not affect default usage of Requests, only applications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\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\u003eFixed an issue where an empty netrc entry could cause malformed authentication to be applied to Requests on Python 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc improvements.\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/M0d3v1\"\u003e\u003ccode\u003e@​M0d3v1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6865\"\u003epsf/requests#6865\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aminvakil\"\u003e\u003ccode\u003e@​aminvakil\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7220\"\u003epsf/requests#7220\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/E8Price\"\u003e\u003ccode\u003e@​E8Price\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6960\"\u003epsf/requests#6960\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitre88\"\u003e\u003ccode\u003e@​mitre88\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7244\"\u003epsf/requests#7244\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/magsen\"\u003e\u003ccode\u003e@​magsen\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/6553\"\u003epsf/requests#6553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Rohan5commit\"\u003e\u003ccode\u003e@​Rohan5commit\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7227\"\u003epsf/requests#7227\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#2330-2026-03-25\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2330-2026-03-25\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/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.33.0 (2026-03-25)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e📣 Requests is adding inline types. If you have a typed code base that\nuses Requests, please take a look at \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003e#7271\u003c/a\u003e. Give it a try, and report\nany gaps or feedback you may have in the issue. 📣\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2026-25645 \u003ccode\u003erequests.utils.extract_zipped_paths\u003c/code\u003e now extracts\ncontents to a non-deterministic location to prevent malicious file\nreplacement. This does not affect default usage of Requests, only\napplications calling the utility function directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrated to a PEP 517 build system using setuptools. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7012\"\u003e#7012\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\u003eFixed an issue where an empty netrc entry could cause\nmalformed authentication to be applied to Requests on\nPython 3.11+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7205\"\u003e#7205\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.9 following its end of support. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7196\"\u003e#7196\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious typo fixes and doc 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/psf/requests/commit/bc04dfd6dad4cb02cd92f5daa81eb562d280a761\"\u003e\u003ccode\u003ebc04dfd\u003c/code\u003e\u003c/a\u003e v2.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/66d21cb07bd6255b1280291c4fafb71803cdb3b7\"\u003e\u003ccode\u003e66d21cb\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/8b9bc8fc0f63be84602387913c4b689f19efd028\"\u003e\u003ccode\u003e8b9bc8f\u003c/code\u003e\u003c/a\u003e Move badges to top of README (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7293\"\u003e#7293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e331a288f369973f5de0ec8901c94cae4fa87286\"\u003e\u003ccode\u003ee331a28\u003c/code\u003e\u003c/a\u003e Remove unused extraction call (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7292\"\u003e#7292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/753fd08c5eacce0aa0df73fe47e49525c67e0a29\"\u003e\u003ccode\u003e753fd08\u003c/code\u003e\u003c/a\u003e docs: fix FAQ grammar in httplib2 example\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/774a0b837a194ee885d4fdd9ca947900cc3daf71\"\u003e\u003ccode\u003e774a0b8\u003c/code\u003e\u003c/a\u003e docs(socks): same block as other sections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/9c72a41bec8597f948c9d8caa5dc3f12273b3303\"\u003e\u003ccode\u003e9c72a41\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.33.0 to 4.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/ebf71906798ec82f34e07d3168f8b8aecaf8a3be\"\u003e\u003ccode\u003eebf7190\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 4.32.0 to 4.33.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0e4ae38f0c93d4f92a96c774bd52c069d12a4798\"\u003e\u003ccode\u003e0e4ae38\u003c/code\u003e\u003c/a\u003e docs: exclude Response.is_permanent_redirect from API docs (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7244\"\u003e#7244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/d568f47278492e630cc990a259047c67991d007a\"\u003e\u003ccode\u003ed568f47\u003c/code\u003e\u003c/a\u003e docs: clarify Quickstart POST example (\u003ca href=\"https://redirect.github.com/psf/requests/issues/6960\"\u003e#6960\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.32.5...v2.33.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `starlette` from 0.49.3 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/Kludex/starlette/releases\"\u003estarlette's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eStarletteDeprecationWarning\u003c/code\u003e instead of \u003ccode\u003eDeprecationWarning\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/starlette/pull/3119\"\u003eKludex/starlette#3119\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce \u003ccode\u003emax_fields\u003c/code\u003e and \u003ccode\u003emax_part_size\u003c/code\u003e in \u003ccode\u003eFormParser\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/starlette/pull/3329\"\u003eKludex/starlette#3329\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEnforce \u003ccode\u003eFormParser\u003c/code\u003e limits in parser callbacks 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/starlette/pull/3331\"\u003eKludex/starlette#3331\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/starlette/compare/1.3.0...1.3.1\"\u003ehttps://github.com/Kludex/starlette/compare/1.3.0...1.3.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eClamp oversized suffix ranges in \u003ccode\u003eFileResponse\u003c/code\u003e by \u003ca href=\"https://github.com/jiyujie2006\"\u003e\u003ccode\u003e@​jiyujie2006\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3307\"\u003eKludex/starlette#3307\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCatch \u003ccode\u003eOSError\u003c/code\u003e alongside \u003ccode\u003eMultiPartException\u003c/code\u003e when closing temp files by \u003ca href=\"https://github.com/N3XT3R1337\"\u003e\u003ccode\u003e@​N3XT3R1337\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3191\"\u003eKludex/starlette#3191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ehttpx2\u003c/code\u003e to the \u003ccode\u003efull\u003c/code\u003e 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/starlette/pull/3323\"\u003eKludex/starlette#3323\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust testclient typing and warnings by \u003ca href=\"https://github.com/waketzheng\"\u003e\u003ccode\u003e@​waketzheng\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3322\"\u003eKludex/starlette#3322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix IndexError in URL.replace() on a URL with no authority by \u003ca href=\"https://github.com/LeSingh1\"\u003e\u003ccode\u003e@​LeSingh1\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3317\"\u003eKludex/starlette#3317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAnnotate URLPath protocol parameter with Literal by \u003ca href=\"https://github.com/Chang-LeHung\"\u003e\u003ccode\u003e@​Chang-LeHung\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3285\"\u003eKludex/starlette#3285\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eavoid collapsing exception groups from user code by \u003ca href=\"https://github.com/graingert\"\u003e\u003ccode\u003e@​graingert\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/2830\"\u003eKludex/starlette#2830\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eremoveprefix\u003c/code\u003e to strip weak ETag indicator in \u003ccode\u003eis_not_modified\u003c/code\u003e by \u003ca href=\"https://github.com/gnosyslambda\"\u003e\u003ccode\u003e@​gnosyslambda\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3193\"\u003eKludex/starlette#3193\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBuild \u003ccode\u003erequest.url\u003c/code\u003e from structured components 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/starlette/pull/3326\"\u003eKludex/starlette#3326\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/jiyujie2006\"\u003e\u003ccode\u003e@​jiyujie2006\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3307\"\u003eKludex/starlette#3307\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/N3XT3R1337\"\u003e\u003ccode\u003e@​N3XT3R1337\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3191\"\u003eKludex/starlette#3191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/leestana01\"\u003e\u003ccode\u003e@​leestana01\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3319\"\u003eKludex/starlette#3319\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/LeSingh1\"\u003e\u003ccode\u003e@​LeSingh1\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3317\"\u003eKludex/starlette#3317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3204\"\u003eKludex/starlette#3204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Chang-LeHung\"\u003e\u003ccode\u003e@​Chang-LeHung\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/starlette/pull/3285\"\u003eKludex/starlette#...\n\n_Description has been truncated_","html_url":"https://github.com/veralvx/audiotame/pull/45","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/veralvx%2Faudiotame/issues/45","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/45/packages"}},{"old_version":"3.29.1","new_version":"3.29.4","update_type":"patch","path":null,"pr_created_at":"2026-06-30T03:45:35.000Z","version_change":"3.29.1 → 3.29.4","issue":{"uuid":"4773493139","node_id":"PR_kwDOS0SQ6s7sDaBu","number":19,"state":"open","title":"chore(deps): bump the python-minor-and-patch group with 7 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-06-30T03:45:35.000Z","updated_at":"2026-06-30T03:53:08.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":7,"packages":[{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"filelock","old_version":"3.29.1","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"pyodps","old_version":"0.12.6","new_version":"0.13.0","repository_url":"https://github.com/aliyun/aliyun-odps-python-sdk"},{"name":"sqlglot","old_version":"30.9.0","new_version":"30.12.0","repository_url":"https://github.com/tobymao/sqlglot"},{"name":"sentence-transformers","old_version":"5.5.1","new_version":"5.6.0","repository_url":"https://github.com/huggingface/sentence-transformers"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"ruff","old_version":"0.15.16","new_version":"0.15.20","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group with 7 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.1` | `3.29.4` |\n| [pyodps](https://github.com/aliyun/aliyun-odps-python-sdk) | `0.12.6` | `0.13.0` |\n| [sqlglot](https://github.com/tobymao/sqlglot) | `30.9.0` | `30.12.0` |\n| [sentence-transformers](https://github.com/huggingface/sentence-transformers) | `5.5.1` | `5.6.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.16` | `0.15.20` |\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\u003eUnreleased\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\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 `filelock` from 3.29.1 to 3.29.4\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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.1...3.29.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/85e73d7f0575e30a3d94a00452255e381c7b8eb3\"\u003e\u003ccode\u003e85e73d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): publish from release.yaml on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f86dcb1abca36bb02b65232d411d7e8dce8569e6\"\u003e\u003ccode\u003ef86dcb1\u003c/code\u003e\u003c/a\u003e Release 3.29.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/643bdbe89bff3c61e29d14d7657d045bb89ade6d\"\u003e\u003ccode\u003e643bdbe\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): restore release environment on tag job (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/559\"\u003e#559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7a8f74a904cf7d98b6baf24eb37175d128a5f818\"\u003e\u003ccode\u003e7a8f74a\u003c/code\u003e\u003c/a\u003e validate pid range in _parse_lock_holder (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/556\"\u003e#556\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d1d49a0b232a6d904ff29b22213834df75ffc59b\"\u003e\u003ccode\u003ed1d49a0\u003c/code\u003e\u003c/a\u003e 🔧 ci(release): publish to PyPI on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b37e162e316ec0ef6e5b8c37a1c04bdaaa411487\"\u003e\u003ccode\u003eb37e162\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/558\"\u003e#558\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d9216dea26f31d369c7d3422bfe14c08b51232f1\"\u003e\u003ccode\u003ed9216de\u003c/code\u003e\u003c/a\u003e Release 3.29.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.1...3.29.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyodps` from 0.12.6 to 0.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/releases\"\u003epyodps's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.13.0\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eStorage API v2\u003c/strong\u003e - Introduces the new Storage API v2 interface for interacting with MaxCompute storage.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVector type support\u003c/strong\u003e - Adds full vector data type support including pure Python type definitions, tunnel I/O, and Arrow tunnel round-trip handling.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBlobWriter and BlobReference for Python UDF\u003c/strong\u003e - Provides stub classes for blob operations in Python UDFs.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFree-threaded Python support (beta)\u003c/strong\u003e - Introduces initial support for free-threaded Python (PEP 703), allowing PyODPS to run in environments without the GIL.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eEnhancements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eDrop support of Python 2.7\u003c/strong\u003e - Support of Python 2.7 is dropped and compatibility modules are removed. Code is changed to accept new syntax of Python\u0026gt;=3.7.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eTry obtaining task statuses when task results are ready\u003c/strong\u003e - Improves task status retrieval by attempting to obtain statuses when results become available. This can help obtaining results under MaxQA.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAdd missing tunnel session arguments\u003c/strong\u003e - Adds previously missing arguments to tunnel session creation.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAdd fallbacks for enums\u003c/strong\u003e - Adds fallback handling for enum values to improve robustness.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eUse struct for timestamps from instance tunnel\u003c/strong\u003e - Improves timestamp handling in instance tunnel by using struct-based parsing.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFix potential exponential recursion in PyODPS DataFrame\u003c/strong\u003e - Introduces caching for ExprProxy objects to avoid exponential recursion.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRemove monkey patch of minidom writexml method\u003c/strong\u003e - Fixes incompatibility of the patch in Python\u0026gt;=3.13.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFix writing upsert table with random primary key location\u003c/strong\u003e - Fixes cython version of RecordHasher to produce correct hash keys.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eCompatibility Notes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ePython 2.7 support dropped\u003c/strong\u003e - PyODPS v0.13.0 no longer supports Python 2.7. The minimum supported Python version is now 3.7. Please do not upgrade if you want to stay with Python 2.7. DataWorks users who are using PyODPS with Python 2.7 will stay with PyODPS 0.12.6.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eMars removed\u003c/strong\u003e - Mars integration support has been removed. Users relying on this should switch to MaxFrame or migrate to alternative solutions before upgrading.\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/aliyun/aliyun-odps-python-sdk/commit/558462b8d61b43c73016837f32c68b2ddfad2cdf\"\u003e\u003ccode\u003e558462b\u003c/code\u003e\u003c/a\u003e Update docs (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/327\"\u003e#327\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/d6f25cdc395396f390460f8d376a3d50af8fdaa3\"\u003e\u003ccode\u003ed6f25cd\u003c/code\u003e\u003c/a\u003e Enable using ARM ubuntu image to build wheel (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/3c6d6063b6b3ddffa324b225e626b8c1723d2641\"\u003e\u003ccode\u003e3c6d606\u003c/code\u003e\u003c/a\u003e Releases v0.13.0 (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/325\"\u003e#325\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/de30fead0f81d83e420971637696f47de8c5c87f\"\u003e\u003ccode\u003ede30fea\u003c/code\u003e\u003c/a\u003e Sync code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/323\"\u003e#323\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/435d40194e29b5724a5e29bc381a4c2e3fc988a7\"\u003e\u003ccode\u003e435d401\u003c/code\u003e\u003c/a\u003e Sync storage api v2 code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/321\"\u003e#321\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/0fb703e47402a9ee9039a3efe0d8d2e2fa4d5f91\"\u003e\u003ccode\u003e0fb703e\u003c/code\u003e\u003c/a\u003e Sync tunnel code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/320\"\u003e#320\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/0a86431f762a6834588730a9fca7bee6bc71f438\"\u003e\u003ccode\u003e0a86431\u003c/code\u003e\u003c/a\u003e Sync code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/319\"\u003e#319\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/commit/59267d926968dec56c05b349f3221310bb42729e\"\u003e\u003ccode\u003e59267d9\u003c/code\u003e\u003c/a\u003e Sync code (\u003ca href=\"https://redirect.github.com/aliyun/aliyun-odps-python-sdk/issues/315\"\u003e#315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/aliyun/aliyun-odps-python-sdk/compare/v0.12.6...v0.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlglot` from 30.9.0 to 30.12.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/64e268a5d95cd84a87ad74ef569fc9bf356fd3fb\"\u003e\u003ccode\u003e64e268a\u003c/code\u003e\u003c/a\u003e fix(clickhouse)!: support arrayMap and arrayFilter roundtrips [CODEX] (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7794\"\u003e#7794\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/b1a0070ca9989e76e30ab512f206423d5d6de0bc\"\u003e\u003ccode\u003eb1a0070\u003c/code\u003e\u003c/a\u003e Fix(optimizer)!: resolve lateral subquery columns (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7802\"\u003e#7802\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/7a0a9abc516fd3280382f26b89adfc1547c10098\"\u003e\u003ccode\u003e7a0a9ab\u003c/code\u003e\u003c/a\u003e feat(snowflake): support invoking dynamically-resolved functions via `IDENTIF...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/075eaf5d8a67e24f85d282f5b8f9ba912f21025f\"\u003e\u003ccode\u003e075eaf5\u003c/code\u003e\u003c/a\u003e feat(optimizer)!: annotate DIV for Hive/Spark/DBX (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7788\"\u003e#7788\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/523f7c2551906ffc37a03b8dae0fea3a0fca783d\"\u003e\u003ccode\u003e523f7c2\u003c/code\u003e\u003c/a\u003e feat(snowflake): support properties before column definitions in \u003ccode\u003eCREATE\u003c/code\u003e sta...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/9f18b7705833c54478ce990c3319d2153ecb8be9\"\u003e\u003ccode\u003e9f18b77\u003c/code\u003e\u003c/a\u003e feat(parser): support \u003ccode\u003eCALLED ON NULL INPUT\u003c/code\u003e function property (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7792\"\u003e#7792\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/ca9d1656ef775d756d4299fe759554784e3cee24\"\u003e\u003ccode\u003eca9d165\u003c/code\u003e\u003c/a\u003e Define bigquery type hint for date funcs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/91a781b9cbe5fb1a3f401464b6ef76aab0715188\"\u003e\u003ccode\u003e91a781b\u003c/code\u003e\u003c/a\u003e fix(annotate_types)!: coerce bigquery date function arg types [CLAUDE] (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7790\"\u003e#7790\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/e16a179a4226e7049e050f5cc86d63ace9c60b40\"\u003e\u003ccode\u003ee16a179\u003c/code\u003e\u003c/a\u003e fix(optimizer): handle non-commutative subtraction in simplify_equality (\u003ca href=\"https://redirect.github.com/tobymao/sqlglot/issues/7791\"\u003e#7791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tobymao/sqlglot/commit/eba0b304f179484ad7b5e0ae3467128abadae2f9\"\u003e\u003ccode\u003eeba0b30\u003c/code\u003e\u003c/a\u003e Sync w/ integration tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tobymao/sqlglot/compare/v30.9.0...v30.12.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentence-transformers` from 5.5.1 to 5.6.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/sentence-transformers/releases\"\u003esentence-transformers's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.6.0 - Fixes for Causal LM Rerankers, Hard-Negative Mining, and More\u003c/h2\u003e\n\u003cp\u003eThis minor version is a correctness- and robustness-focused release. It fixes a silent scoring bug for causal-LM rerankers, corrects several hard-negative mining and GIST loss edge cases, restores TSDAE on \u003ccode\u003etransformers\u003c/code\u003e v5, and adds Apple Silicon (MPS) support for the cached losses.\u003c/p\u003e\n\u003cp\u003eThe headline fix affects chat-template models that read the final token position, i.e. causal-LM rerankers (like \u003ccode\u003eQwen3-Reranker\u003c/code\u003e) and last-token-pooling embedders: when an over-long input was truncated, the chat template's trailing suffix (e.g. the assistant prefill the model scores from) was silently dropped, producing wrong scores with no error. There's also a forward-looking deprecation: loading local custom code without \u003ccode\u003etrust_remote_code=True\u003c/code\u003e now warns, and will require it from v6.0.\u003c/p\u003e\n\u003cp\u003eInstall this version with\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e# Training + Inference\r\npip install sentence-transformers[train]==5.6.0\r\n\u003ch1\u003eInference only, use one of:\u003c/h1\u003e\n\u003cp\u003epip install sentence-transformers==5.6.0\npip install sentence-transformers[onnx-gpu]==5.6.0\npip install sentence-transformers[onnx]==5.6.0\npip install sentence-transformers[openvino]==5.6.0\u003c/p\u003e\n\u003ch1\u003eMultimodal dependencies (optional):\u003c/h1\u003e\n\u003cp\u003epip install sentence-transformers[image]==5.6.0\npip install sentence-transformers[audio]==5.6.0\npip install sentence-transformers[video]==5.6.0\u003c/p\u003e\n\u003ch1\u003eOr combine as needed:\u003c/h1\u003e\n\u003cp\u003epip install sentence-transformers[train,onnx,image]==5.6.0\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003ch2\u003eFixed silently wrong scores when truncation drops chat-template suffixes (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3787\"\u003e#3787\u003c/a\u003e)\u003c/h2\u003e\n\u003cp\u003eChat-template models render the full conversation to a flat string before tokenizing, so when the rendered input is longer than the tokenizer's \u003ccode\u003emodel_max_length\u003c/code\u003e, the tokenizer truncates it from the right and drops the template's trailing suffix: the fixed tokens a template appends \u003cem\u003eafter\u003c/em\u003e the content, e.g. a prompt, instruction, \u003ccode\u003e[/INST]\u003c/code\u003e, or a trailing EOS. For models that read the final token position, this silently corrupted the result:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ecausal-LM rerankers (e.g. \u003ccode\u003eQwen/Qwen3-Reranker-0.6B\u003c/code\u003e) score a pair from the last token's \u003ccode\u003eyes\u003c/code\u003e/\u003ccode\u003eno\u003c/code\u003e logits, and\u003c/li\u003e\n\u003cli\u003elast-token-pooling embedders read the final hidden state.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eWhen the suffix was truncated away, that final position landed mid-document instead of after the prefill, so the score or embedding came from the wrong place.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eTransformer.preprocess\u003c/code\u003e now detects when truncation drops the suffix and splices it back onto the tail of each truncated row. Because the fix lives in the shared base \u003ccode\u003eTransformer\u003c/code\u003e, it applies across \u003ccode\u003eSentenceTransformer\u003c/code\u003e, \u003ccode\u003eCrossEncoder\u003c/code\u003e, and \u003ccode\u003eSparseEncoder\u003c/code\u003e. It's enabled by default and saved to the model configuration. Pass \u003ccode\u003eprocessing_kwargs={\u0026quot;chat_template\u0026quot;: {\u0026quot;restore_suffix\u0026quot;: False}}\u003c/code\u003e to opt back into raw truncation.\u003c/p\u003e\n\u003ch2\u003eHard-negative mining and GIST loss correctness (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3821\"\u003e#3821\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3817\"\u003e#3817\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3816\"\u003e#3816\u003c/a\u003e)\u003c/h2\u003e\n\u003cp\u003eA trio of correctness and scalability fixes for hard-negative mining and the GIST losses:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSign-independent relative margin: \u003ccode\u003emine_hard_negatives(relative_margin=...)\u003c/code\u003e and the \u003ccode\u003emargin_strategy=\u0026quot;relative\u0026quot;\u003c/code\u003e branch of \u003ccode\u003eGISTEmbedLoss\u003c/code\u003e / \u003ccode\u003eCachedGISTEmbedLoss\u003c/code\u003e used a multiplicative threshold (\u003ccode\u003epositive * (1 - margin)\u003c/code\u003e) that only behaves correctly when the positive-pair similarity is positive. When that similarity was negative, the threshold moved the wrong way and let through false negatives: candidates \u003cem\u003emore\u003c/em\u003e similar to the anchor than the true positive. The threshold is now \u003ccode\u003epositive - |positive| * margin\u003c/code\u003e, identical to before for positive scores but correct for negative ones.\u003c/li\u003e\n\u003cli\u003eDistributed positive masking in the GIST losses: with \u003ccode\u003egather_across_devices=True\u003c/code\u003e and a non-zero \u003ccode\u003emargin\u003c/code\u003e, the false-negative suppression mask protected the wrong columns on ranks beyond the first (it ignored the per-rank offset into the gathered batch), which set the true positive's logit to \u003ccode\u003e-inf\u003c/code\u003e and produced a \u003ccode\u003e+inf\u003c/code\u003e loss. The mask now accounts for the cross-rank offset, so multi-GPU GIST training stays finite.\u003c/li\u003e\n\u003cli\u003eMemory-bounded mining without FAISS: \u003ccode\u003emine_hard_negatives(use_faiss=False)\u003c/code\u003e (the default) materialized the full \u003ccode\u003e(queries × corpus)\u003c/code\u003e similarity matrix at once, which could OOM on large corpora. It now batches over the query axis (controlled by \u003ccode\u003efaiss_batch_size\u003c/code\u003e, default 16384), bounding peak memory while producing identical results.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eTSDAE weight tying restored on \u003ccode\u003etransformers\u003c/code\u003e v5 (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3781\"\u003e#3781\u003c/a\u003e)\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003etransformers\u003c/code\u003e v5 removed the private \u003ccode\u003ePreTrainedModel._tie_encoder_decoder_weights\u003c/code\u003e helper that \u003ccode\u003eDenoisingAutoEncoderLoss\u003c/code\u003e (TSDAE) used to tie its separate encoder and decoder. As a stopgap, v5.5 raised a \u003ccode\u003eRuntimeError\u003c/code\u003e for the default \u003ccode\u003etie_encoder_decoder=True\u003c/code\u003e on \u003ccode\u003etransformers \u0026gt;= 5.0.0\u003c/code\u003e, effectively breaking TSDAE there unless you pinned an older \u003ccode\u003etransformers\u003c/code\u003e or disabled tying. TSDAE now ships its own tying routine that shares storage between encoder and decoder, so it works on both \u003ccode\u003etransformers\u003c/code\u003e \u0026lt;5 and \u0026gt;=5 with the default settings.\u003c/p\u003e\n\u003ch2\u003eDeprecation: loading local custom code without \u003ccode\u003etrust_remote_code\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3807\"\u003e#3807\u003c/a\u003e)\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/huggingface/sentence-transformers/commit/9c73df3143e97598938a1640d737d3f0f11878e5\"\u003e\u003ccode\u003e9c73df3\u003c/code\u003e\u003c/a\u003e Release v5.6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/222b0529b93b15f191b6f86b25350be4d226361e\"\u003e\u003ccode\u003e222b052\u003c/code\u003e\u003c/a\u003e [fix] Don't override device_map placement with the device argument (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3823\"\u003e#3823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/a38a6bf16f50347c100c515fed64e2d8e75bf290\"\u003e\u003ccode\u003ea38a6bf\u003c/code\u003e\u003c/a\u003e Fix causal LM reranker scoring when max_length truncates chat-template suffix...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/18121031ece5ad8f4676127c6693f517c113782a\"\u003e\u003ccode\u003e1812103\u003c/code\u003e\u003c/a\u003e [fix] Make relative margin sign-independent in mining and GIST losses (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3821\"\u003e#3821\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/ae1acc3fb2aa2004577b297eb4a915ce7a03316a\"\u003e\u003ccode\u003eae1acc3\u003c/code\u003e\u003c/a\u003e Warn when loading local custom code without trust_remote_code (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3807\"\u003e#3807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/429cf5d424869c7aba629ded61e93b2788921677\"\u003e\u003ccode\u003e429cf5d\u003c/code\u003e\u003c/a\u003e [fix] Support MPS in the cached losses' RandContext (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3812\"\u003e#3812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/77fdbfff17c476190f3bb09436e91280fe27b247\"\u003e\u003ccode\u003e77fdbff\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003efix\u003c/code\u003e] fix \u003ccode\u003eMPS\u003c/code\u003e errors (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3818\"\u003e#3818\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/bfba988a1ebc5717b7c52af597e43dba86b4a590\"\u003e\u003ccode\u003ebfba988\u003c/code\u003e\u003c/a\u003e [fix] Fix positive masking in GIST losses with multi-GPU + gather_across_devi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/29e382b56077f5ade739737d14878357345b4e7e\"\u003e\u003ccode\u003e29e382b\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003edocs\u003c/code\u003e] Fix doc build problems (part 1) (\u003ca href=\"https://redirect.github.com/huggingface/sentence-transformers/issues/3811\"\u003e#3811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/sentence-transformers/commit/d16e6bfacf5b00143a93d007fbb711d8095b297b\"\u003e\u003ccode\u003ed16e6bf\u003c/code\u003e\u003c/a\u003e [fix] Avoid materializing the full similarity matrix in mine_hard_negatives w...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/huggingface/sentence-transformers/compare/v5.5.1...v5.6.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.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/9.0.3...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ruff` from 0.15.16 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.16...0.15.20\"\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/aliyun/maxcompute-semantic/pull/19","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/aliyun%2Fmaxcompute-semantic/issues/19","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/19/packages"}},{"old_version":"3.29.1","new_version":"3.29.4","update_type":"patch","path":null,"pr_created_at":"2026-06-28T20:07:52.000Z","version_change":"3.29.1 → 3.29.4","issue":{"uuid":"4763468579","node_id":"PR_kwDOTHa2xM7riq5Z","number":32,"state":"open","title":"build(deps): Bump the pip-minor-patch group across 1 directory with 36 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-28T20:07:52.000Z","updated_at":"2026-06-28T22:54:58.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"pip-minor-patch","update_count":36,"packages":[{"name":"anyio","old_version":"4.13.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"apscheduler","old_version":"3.10.4","new_version":"3.11.3","repository_url":"https://github.com/agronholm/apscheduler"},{"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":"fastapi","old_version":"0.136.3","new_version":"0.138.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"filelock","old_version":"3.29.1","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"fsspec","old_version":"2026.4.0","new_version":"2026.6.0","repository_url":"https://github.com/fsspec/filesystem_spec"},{"name":"grpcio","old_version":"1.81.0","new_version":"1.81.1","repository_url":"https://github.com/grpc/grpc"},{"name":"hpack","old_version":"4.1.0","new_version":"4.2.0","repository_url":"https://github.com/python-hyper/hpack"},{"name":"huggingface-hub","old_version":"1.18.0","new_version":"1.21.0","repository_url":"https://github.com/huggingface/huggingface_hub"},{"name":"google-api-python-client","old_version":"2.197.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.55.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"httplib2","old_version":"0.31.2","new_version":"0.32.0","repository_url":"https://github.com/httplib2/httplib2"},{"name":"llama-cpp-python","old_version":"0.3.28","new_version":"0.3.31","repository_url":"https://github.com/abetlen/llama-cpp-python"},{"name":"numpy","old_version":"2.3.5","new_version":"2.5.0","repository_url":"https://github.com/numpy/numpy"},{"name":"onnxruntime","old_version":"1.26.0","new_version":"1.27.0","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"protobuf","old_version":"7.35.0","new_version":"7.35.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pypdfium2","old_version":"5.9.0","new_version":"5.10.1","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"slowapi","old_version":"0.1.9","new_version":"0.1.10","repository_url":"https://github.com/laurents/slowapi"},{"name":"sse-starlette","old_version":"3.4.4","new_version":"3.4.5","repository_url":"https://github.com/sysid/sse-starlette"},{"name":"tokenizers","old_version":"0.22.2","new_version":"0.23.1","repository_url":"https://github.com/huggingface/tokenizers"},{"name":"tqdm","old_version":"4.68.2","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typer","old_version":"0.25.1","new_version":"0.26.8","repository_url":"https://github.com/fastapi/typer"},{"name":"tzlocal","old_version":"5.3.1","new_version":"5.4.3","repository_url":"https://github.com/regebro/tzlocal"},{"name":"wrapt","old_version":"2.2.1","new_version":"2.2.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"pyobjc-core","old_version":"12.1","new_version":"12.2.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"pyobjc-framework-cocoa","old_version":"12.1","new_version":"12.2.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"pyobjc-framework-contacts","old_version":"12.1","new_version":"12.2.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"pyobjc-framework-eventkit","old_version":"12.1","new_version":"12.2.1","repository_url":"https://github.com/ronaldoussoren/pyobjc"},{"name":"graphifyy","old_version":"0.8.36","new_version":"0.9.1","repository_url":"https://github.com/safishamsi/graphify"},{"name":"scipy","old_version":"1.17.1","new_version":"1.18.0","repository_url":"https://github.com/scipy/scipy"},{"name":"mistral-common","old_version":"1.11.3","new_version":"1.11.5","repository_url":"https://github.com/mistralai/mistral-common"},{"name":"transformers","old_version":"5.10.2","new_version":"5.12.1","repository_url":"https://github.com/huggingface/transformers"},{"name":"regex","old_version":"2026.5.9","new_version":"2026.6.28","repository_url":"https://github.com/mrabarnett/mrab-regex"}],"path":null,"ecosystem":"pip"},"body":"[//]: # (dependabot-start)\n⚠️  **Dependabot is rebasing this PR** ⚠️ \n\nRebasing might not happen immediately, so don't worry if this takes some time.\n\nNote: if you make any changes to this PR yourself, they will take precedence over the rebase.\n\n---\n\n[//]: # (dependabot-end)\n\nBumps the pip-minor-patch group with 36 updates in the /requirements directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.1` |\n| [apscheduler](https://github.com/agronholm/apscheduler) | `3.10.4` | `3.11.3` |\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| [fastapi](https://github.com/fastapi/fastapi) | `0.136.3` | `0.138.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.1` | `3.29.4` |\n| [fsspec](https://github.com/fsspec/filesystem_spec) | `2026.4.0` | `2026.6.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.0` | `1.81.1` |\n| [hpack](https://github.com/python-hyper/hpack) | `4.1.0` | `4.2.0` |\n| [huggingface-hub](https://github.com/huggingface/huggingface_hub) | `1.18.0` | `1.21.0` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.197.0` | `2.198.0` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.53.0` | `2.55.1` |\n| [httplib2](https://github.com/httplib2/httplib2) | `0.31.2` | `0.32.0` |\n| [llama-cpp-python](https://github.com/abetlen/llama-cpp-python) | `0.3.28` | `0.3.31` |\n| [numpy](https://github.com/numpy/numpy) | `2.3.5` | `2.5.0` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.26.0` | `1.27.0` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `7.35.0` | `7.35.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.9.0` | `5.10.1` |\n| [slowapi](https://github.com/laurents/slowapi) | `0.1.9` | `0.1.10` |\n| [sse-starlette](https://github.com/sysid/sse-starlette) | `3.4.4` | `3.4.5` |\n| [tokenizers](https://github.com/huggingface/tokenizers) | `0.22.2` | `0.23.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.2` | `4.68.3` |\n| [typer](https://github.com/fastapi/typer) | `0.25.1` | `0.26.8` |\n| [tzlocal](https://github.com/regebro/tzlocal) | `5.3.1` | `5.4.3` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.2.1` | `2.2.2` |\n| [pyobjc-core](https://github.com/ronaldoussoren/pyobjc) | `12.1` | `12.2.1` |\n| [pyobjc-framework-cocoa](https://github.com/ronaldoussoren/pyobjc) | `12.1` | `12.2.1` |\n| [pyobjc-framework-contacts](https://github.com/ronaldoussoren/pyobjc) | `12.1` | `12.2.1` |\n| [pyobjc-framework-eventkit](https://github.com/ronaldoussoren/pyobjc) | `12.1` | `12.2.1` |\n| [graphifyy](https://github.com/safishamsi/graphify) | `0.8.36` | `0.9.1` |\n| [scipy](https://github.com/scipy/scipy) | `1.17.1` | `1.18.0` |\n| [mistral-common](https://github.com/mistralai/mistral-common) | `1.11.3` | `1.11.5` |\n| [transformers](https://github.com/huggingface/transformers) | `5.10.2` | `5.12.1` |\n| [regex](https://github.com/mrabarnett/mrab-regex) | `2026.5.9` | `2026.6.28` |\n\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 `apscheduler` from 3.10.4 to 3.11.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/apscheduler/releases\"\u003eapscheduler's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.11.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed sub-minute interval jobs stalling for the duration of a DST spring-forward gap when the scheduler was configured with a \u003ccode\u003eZoneInfo\u003c/code\u003e time zone, caused by the wakeup delay being computed from the naive wall-clock difference instead of the actual UTC difference (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1103\"\u003e#1103\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed imported jobs missing their scheduler and job store links (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1119\"\u003e#1119\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed an issue where a job using a \u003ccode\u003eCronTrigger\u003c/code\u003e scheduled in a repeated time interval during DST transitions could cause the scheduler to get stuck in an infinite loop (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1021\"\u003e#1021\u003c/a\u003e; PR by \u003ca href=\"https://github.com/soulofakuma\"\u003e\u003ccode\u003e@​soulofakuma\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003escheduler.shutdown()\u003c/code\u003e not raising \u003ccode\u003eSchedulerNotRunning\u003c/code\u003e (or raising the wrong exception) for asynchronous schedulers when the scheduler is in fact not running\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCronTrigger\u003c/code\u003e sticking on a folded datetime during the fall-back DST transition (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1021\"\u003e#1021\u003c/a\u003e \u0026lt;\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1021\"\u003eagronholm/apscheduler#1021\u003c/a\u003e\u0026gt;_; PR by \u003ca href=\"https://github.com/berianjames\"\u003e\u003ccode\u003e@​berianjames\u003c/code\u003e\u003c/a\u003e)`\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for Python 3.6 and 3.7\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ccode\u003eZoneInfo\u003c/code\u003e time zones and deprecated support for pytz time zones\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eCalendarIntervalTrigger\u003c/code\u003e, backported from the 4.x series\u003c/li\u003e\n\u003cli\u003eAdded the ability to export and import jobs via \u003ccode\u003escheduler.export_jobs()\u003c/code\u003e and \u003ccode\u003escheduler.import_jobs()\u003c/code\u003e, respectively\u003c/li\u003e\n\u003cli\u003eRemoved the dependency on \u003ccode\u003esix\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eProcessPoolExecutor\u003c/code\u003e to spawn new subprocesses from scratch instead of forking on all platform\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eAsyncIOScheduler\u003c/code\u003e inadvertently creating a defunct event loop at start, leading to the scheduler not working at all\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eProcessPoolExecutor\u003c/code\u003e not respecting the passed keyword arguments when a broken pool was being replaced\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/apscheduler/commit/4308ec95b94069f5dbdddb6c60fb792dfc8c40a4\"\u003e\u003ccode\u003e4308ec9\u003c/code\u003e\u003c/a\u003e Added the release version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/ff68780d7f66fe0f505c3a32764005cd004996b9\"\u003e\u003ccode\u003eff68780\u003c/code\u003e\u003c/a\u003e Added a note about weekday numbers in CronTrigger.from_crontab()\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/36936e904052e6bfbd03f83e17b03701b7a589fe\"\u003e\u003ccode\u003e36936e9\u003c/code\u003e\u003c/a\u003e Updated actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/c0ff7e4ccfcc703db44a905b70c1d6568a6f81fa\"\u003e\u003ccode\u003ec0ff7e4\u003c/code\u003e\u003c/a\u003e Fixed Pyside6 tests failing on Python 3.9 and 3.8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/1b782c90edeac787deb3106fb3e5c775b3d6b0cd\"\u003e\u003ccode\u003e1b782c9\u003c/code\u003e\u003c/a\u003e Fixed fixture \u003ccode\u003ecoreapp\u003c/code\u003e not found\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/dc3dde4a34c021f215d120d88fe19ddc66bb8a66\"\u003e\u003ccode\u003edc3dde4\u003c/code\u003e\u003c/a\u003e Test against PySide6 on all Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/18a6f6b637e372730f6325786f97936e6eaa9f77\"\u003e\u003ccode\u003e18a6f6b\u003c/code\u003e\u003c/a\u003e Fixed imported jobs missing their scheduler and job store links\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/1693db4d8861bf941d299d79a586797ad0ac6467\"\u003e\u003ccode\u003e1693db4\u003c/code\u003e\u003c/a\u003e Fix interval jobs stalling across DST spring-forward with ZoneInfo (\u003ca href=\"https://redirect.github.com/agronholm/apscheduler/issues/1114\"\u003e#1114\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/0636bf4931fddb706b948b6781ebbd76058f1443\"\u003e\u003ccode\u003e0636bf4\u003c/code\u003e\u003c/a\u003e Added Python 3.14 to the test matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/apscheduler/commit/3eb3de8115f1631dc5e2ecce7b00175d34ffbdf9\"\u003e\u003ccode\u003e3eb3de8\u003c/code\u003e\u003c/a\u003e Fixed bad use of pytest.raises()\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/agronholm/apscheduler/compare/3.10.4...3.11.3\"\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\u003eUnreleased\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\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 `fastapi` from 0.136.3 to 0.138.1\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.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\u003cli\u003e🔧 Update sponsors: Add TestMu again. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15830\"\u003e#15830\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 zizmor workflow security checks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15820\"\u003e#15820\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 pydantic-settings from 2.14.1 to 2.14.2. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15799\"\u003e#15799\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.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for \u003ccode\u003eapp.frontend(\u0026quot;/\u0026quot;, directory=\u0026quot;dist\u0026quot;)\u003c/code\u003e and \u003ccode\u003erouter.frontend(\u0026quot;/\u0026quot;, directory=\u0026quot;dist\u0026quot;)\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15800\"\u003e#15800\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003eRead the docs: \u003ca href=\"https://fastapi.tiangolo.com/tutorial/frontend/\"\u003eFrontend\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix typo in release notes. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15807\"\u003e#15807\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add \u003ccode\u003eapp.frontend()\u003c/code\u003e instructions to Agent Library Skill. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15805\"\u003e#15805\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 release notes link. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15802\"\u003e#15802\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 white space characters in bigger apps. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15801\"\u003e#15801\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 grammar, typos, and broken links in docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15694\"\u003e#15694\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🌐 Enable Hindi docs translations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15554\"\u003e#15554\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🐛 Fix failing test, update format for raised errors. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15804\"\u003e#15804\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 test-alls-green. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15803\"\u003e#15803\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🔧 Enable checking \u003ccode\u003erelease-notes.md\u003c/code\u003e for typos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15796\"\u003e#15796\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📝 Tweak wording about deploying to FastAPI Cloud. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15793\"\u003e#15793\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\u003egpt-5.5\u003c/code\u003e model in \u003ccode\u003etranslate.py\u003c/code\u003e, specify \u003ccode\u003e-chat\u003c/code\u003e to avoid warnings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15792\"\u003e#15792\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.137.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003eiter_route_contexts()\u003c/code\u003e for advanced use cases that used to use \u003ccode\u003erouter.routes\u003c/code\u003e (e.g. Jupyverse). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15785\"\u003e#15785\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🌐 Fix broken Markdown in Korean custom response docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15774\"\u003e#15774\u003c/a\u003e by \u003ca href=\"https://github.com/kooqooo\"\u003e\u003ccode\u003e@​kooqooo\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/15761\"\u003e#15761\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/15760\"\u003e#15760\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/b90c49aefad4958abdfbcacf9c2f816940a8f0e2\"\u003e\u003ccode\u003eb90c49a\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.138.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15842\"\u003e#15842\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/1f2f3df4852bf7cb29be1187806d95a0fdc7ea40\"\u003e\u003ccode\u003e1f2f3df\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0af003a85da454dcf6b6783e0ad3f0dd687e944f\"\u003e\u003ccode\u003e0af003a\u003c/code\u003e\u003c/a\u003e ♻️ Refactor Library Skills, make info easier to find for agents (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15841\"\u003e#15841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/d5494c1f01796350fa082cf8a82b124e95162e9d\"\u003e\u003ccode\u003ed5494c1\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/82c527e714f16bf9e07202aff0fb91cada329844\"\u003e\u003ccode\u003e82c527e\u003c/code\u003e\u003c/a\u003e 👷 Simplify pull request workflow triggers (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15836\"\u003e#15836\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3f28dbe6d84cdac19bdb2b41e1664981e37359ab\"\u003e\u003ccode\u003e3f28dbe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/f6ea6b1f12e6d1a45c630a8fdf5d4c7c0959dad9\"\u003e\u003ccode\u003ef6ea6b1\u003c/code\u003e\u003c/a\u003e 👷 Update issue-manager to 0.7.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15833\"\u003e#15833\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/219ac634ab82b6321492ef97fb223b618ce13948\"\u003e\u003ccode\u003e219ac63\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/fcc8e1f99431a0b381eaef03e07446e6975422b7\"\u003e\u003ccode\u003efcc8e1f\u003c/code\u003e\u003c/a\u003e ⬆️ Update issue-manager to 0.7.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15831\"\u003e#15831\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/457f4c705c0287e49d7aa4ddec292db6185d16e3\"\u003e\u003ccode\u003e457f4c7\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.3...0.138.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.29.1 to 3.29.4\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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.1...3.29.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/85e73d7f0575e30a3d94a00452255e381c7b8eb3\"\u003e\u003ccode\u003e85e73d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): publish from release.yaml on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f86dcb1abca36bb02b65232d411d7e8dce8569e6\"\u003e\u003ccode\u003ef86dcb1\u003c/code\u003e\u003c/a\u003e Release 3.29.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/643bdbe89bff3c61e29d14d7657d045bb89ade6d\"\u003e\u003ccode\u003e643bdbe\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): restore release environment on tag job (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/559\"\u003e#559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7a8f74a904cf7d98b6baf24eb37175d128a5f818\"\u003e\u003ccode\u003e7a8f74a\u003c/code\u003e\u003c/a\u003e validate pid range in _parse_lock_holder (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/556\"\u003e#556\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d1d49a0b232a6d904ff29b22213834df75ffc59b\"\u003e\u003ccode\u003ed1d49a0\u003c/code\u003e\u003c/a\u003e 🔧 ci(release): publish to PyPI on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b37e162e316ec0ef6e5b8c37a1c04bdaaa411487\"\u003e\u003ccode\u003eb37e162\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/558\"\u003e#558\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d9216dea26f31d369c7d3422bfe14c08b51232f1\"\u003e\u003ccode\u003ed9216de\u003c/code\u003e\u003c/a\u003e Release 3.29.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.1...3.29.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fsspec` from 2026.4.0 to 2026.6.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/a2457004d03e0312f715f90f58873de5ab195a37\"\u003e\u003ccode\u003ea245700\u003c/code\u003e\u003c/a\u003e changelog (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2049\"\u003e#2049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/652325d9b9459286a5b72c7e6228b061fb29827c\"\u003e\u003ccode\u003e652325d\u003c/code\u003e\u003c/a\u003e Fix async cat ranges on error (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2045\"\u003e#2045\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/073aac840748ab95bea39468306123268e316184\"\u003e\u003ccode\u003e073aac8\u003c/code\u003e\u003c/a\u003e Forward kwargs from cat_ranges to cat_file (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2044\"\u003e#2044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/2818611ab2a197cb3d560d50be09fdb5fbff775d\"\u003e\u003ccode\u003e2818611\u003c/code\u003e\u003c/a\u003e FTP: preserve filenames containing whitespace in _mlsd2 (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2043\"\u003e#2043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/c87938473cd5a25448385b3fb77481574595e353\"\u003e\u003ccode\u003ec879384\u003c/code\u003e\u003c/a\u003e Prevent attribute error by checking for 'forced' attribute before flushing ca...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/71b8a6b6b1c3dbb33fa5cb0c206a84b35164d035\"\u003e\u003ccode\u003e71b8a6b\u003c/code\u003e\u003c/a\u003e Reflect async _walk correctly (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2040\"\u003e#2040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/5eec9f9353b8d517d296428441a84fa26e9a6438\"\u003e\u003ccode\u003e5eec9f9\u003c/code\u003e\u003c/a\u003e Fix: Omit \u003ccode\u003ethreading.get_ident()\u003c/code\u003e from cache token for async implementations ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/86438783f93b1398ef245b92f0e6063b445b611c\"\u003e\u003ccode\u003e8643878\u003c/code\u003e\u003c/a\u003e Small safety improvements (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2039\"\u003e#2039\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/a1c16ab3f07f354aa371c38f7b1b07ea7fd4c5c8\"\u003e\u003ccode\u003ea1c16ab\u003c/code\u003e\u003c/a\u003e Honour simple_templates everywhere in referenceFS (\u003ca href=\"https://redirect.github.com/fsspec/filesystem_spec/issues/2029\"\u003e#2029\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fsspec/filesystem_spec/commit/85facaaf2659c8bbd031df24ead9aca36668c635\"\u003e\u003ccode\u003e85facaa\u003c/code\u003e\u003c/a\u003e Fix infinite recursion in expand_path when resolving paths with glob magic ch...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fsspec/filesystem_spec/compare/2026.4.0...2026.6.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `grpcio` from 1.81.0 to 1.81.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003egrpcio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.81.1\u003c/h2\u003e\n\u003cp\u003eThis is release 1.81.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003egraphic\u003c/a\u003e) of gRPC Core.\u003c/p\u003e\n\u003cp\u003eFor gRPC documentation, see \u003ca href=\"https://grpc.io/\"\u003egrpc.io\u003c/a\u003e. For previous releases, see \u003ca href=\"https://github.com/grpc/grpc/releases\"\u003eReleases\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis release contains refinements, improvements, and bug fixes, with highlights listed below.\u003c/p\u003e\n\u003ch2\u003eCore\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[EventEngine] Fix a potential use-after-free error on Windows. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42078\"\u003e#42078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[ssl] Server side handshaker factory stores a map of key signers. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42002\"\u003e#42002\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Core] Fix completion queue shutdown race on weak memory models (ARM). (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41510\"\u003e#41510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Fix a Windows race that causes an assertion error. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41563\"\u003e#41563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[grpc_error] enable error_flatten experiment in OSS. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41471\"\u003e#41471\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[ObjC] Add receiveNextMessage to GRPCUnaryProtoCall. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42260\"\u003e#42260\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Add typing_extensions dep to aio Bazel target. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42001\"\u003e#42001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Pyright] Part 1 - Pyright for src/python/grpcio/grpc/aio/_base_server.py. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42240\"\u003e#42240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Drop 3.9. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/42145\"\u003e#42145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] grpc-status: Relax protobuf dependency upper bound to allow 7.x. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41948\"\u003e#41948\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Typeguard] Part 5 - Add Typeguard SYNC Stack in tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40278\"\u003e#40278\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Remove GIL from ReceiveMessageOperation.un_c method. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41812\"\u003e#41812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Support observability in AsyncIO stack. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41573\"\u003e#41573\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Trim Python2 backward compatiblity syntax - removed (object) inheritance. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41708\"\u003e#41708\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRuby\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Ruby] Drop support for EOL Ruby 3.1 and clean up. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41435\"\u003e#41435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Composed CallCredentials keep a reference to their source. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41782\"\u003e#41782\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/grpc/grpc/commit/e84a8a2f04095f2772ba42a4abccde4f9243e75b\"\u003e\u003ccode\u003ee84a8a2\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.81.1 (on v1.81.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/42584\"\u003e#42584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/4706d6a147d58bdcca59509ec22d8c2086e925ca\"\u003e\u003ccode\u003e4706d6a\u003c/code\u003e\u003c/a\u003e [xDS] fix use-after-free in global XdsClient map (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/42559\"\u003e#42559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/42a6b5b0d55bc6445da1ca6f71d6f3a824bec092\"\u003e\u003ccode\u003e42a6b5b\u003c/code\u003e\u003c/a\u003e [Core][Release] Update BCR presubmit job definition (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/42561\"\u003e#42561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.81.0...v1.81.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `hpack` from 4.1.0 to 4.2.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-hyper/hpack/blob/master/CHANGELOG.rst\"\u003ehpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.2.0 (2026-06-22)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAPI Changes (Backward Incompatible)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.9 has been removed.\u003c/li\u003e\n\u003cli\u003eSupport for PyPy 3.9 has been removed.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eAPI Changes (Backward Compatible)\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14 has been added.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eHeaders marked as \u003ccode\u003esensitive\u003c/code\u003e will no longer log their value at DEBUG level. Instead a placeholder value of \u003ccode\u003eSENSITIVE_REDACTED\u003c/code\u003e is logged.\u003c/li\u003e\n\u003cli\u003eFixed perfect match missed for headers with empty values.\u003c/li\u003e\n\u003cli\u003eRestricted variable integer decoding to uint32 to prevent run-away computation. With thanks to \u003ccode\u003eHiroki Nishino\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _Hiroki Nishino: \u003ca href=\"https://github.com/tawAsh1\"\u003ehttps://github.com/tawAsh1\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/python-hyper/hpack/commit/d05cff4cd462658847f67c48700aab40b2ba8cf1\"\u003e\u003ccode\u003ed05cff4\u003c/code\u003e\u003c/a\u003e v4.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/4bdecf4700af6e9a480647305c4c70ca2c31150d\"\u003e\u003ccode\u003e4bdecf4\u003c/code\u003e\u003c/a\u003e packaging and dependencies++\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/8cfb02c547740e16dbfe7aba77bad84b297cec2c\"\u003e\u003ccode\u003e8cfb02c\u003c/code\u003e\u003c/a\u003e Restricte variable integer decoding to uint32 to prevent run-away computation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/77e36a9cb51a930047ab8d4bed527e4c4d8a9854\"\u003e\u003ccode\u003e77e36a9\u003c/code\u003e\u003c/a\u003e linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/5258f148b2b7c507383cf6d6116f8f32c67187d4\"\u003e\u003ccode\u003e5258f14\u003c/code\u003e\u003c/a\u003e rename test file to avoice pyc import confusion\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/44193d8eb22a805430adb893075a744e0e2e3cc7\"\u003e\u003ccode\u003e44193d8\u003c/code\u003e\u003c/a\u003e project cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/e0497f94c948d61d2af0954933c139475f78e48e\"\u003e\u003ccode\u003ee0497f9\u003c/code\u003e\u003c/a\u003e Fix perfect match missed for headers with empty values: add test and changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/89cce964fded888d720289dcce881d4e1f35be80\"\u003e\u003ccode\u003e89cce96\u003c/code\u003e\u003c/a\u003e Fix perfect match missed for headers with empty values\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/1621490073e4992fe3bf28b547d2574edbd95043\"\u003e\u003ccode\u003e1621490\u003c/code\u003e\u003c/a\u003e Apply suggestion from \u003ca href=\"https://github.com/Kriechi\"\u003e\u003ccode\u003e@​Kriechi\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-hyper/hpack/commit/517dd788e0dddc57885296a4482095847eebbf9d\"\u003e\u003ccode\u003e517dd78\u003c/code\u003e\u003c/a\u003e Apply suggestion from \u003ca href=\"https://github.com/Kriechi\"\u003e\u003ccode\u003e@​Kriechi\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-hyper/hpack/compare/v4.1.0...v4.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `huggingface-hub` from 1.18.0 to 1.21.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/huggingface/huggingface_hub/releases\"\u003ehuggingface-hub's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[v1.21.0] Jobs filtering \u0026amp; pagination\u003c/h2\u003e\n\u003ch2\u003e📊 Jobs listing revamped: filter, paginate, and \u003ccode\u003els\u003c/code\u003e instead of \u003ccode\u003eps\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003eThe Jobs listing API and CLI have been overhauled with server-side filtering, proper pagination, and a CLI rename that aligns with the rest of \u003ccode\u003ehf\u003c/code\u003e. \u003ccode\u003elist_jobs()\u003c/code\u003e now accepts \u003ccode\u003estatus\u003c/code\u003e and \u003ccode\u003elabels\u003c/code\u003e parameters that push filtering to the server, and returns a lazy iterator (matching \u003ccode\u003elist_models\u003c/code\u003e, \u003ccode\u003elist_datasets\u003c/code\u003e, etc.) so large result sets are fetched page by page. On the CLI side, \u003ccode\u003ehf jobs ps\u003c/code\u003e has been renamed to \u003ccode\u003ehf jobs ls\u003c/code\u003e for consistency with \u003ccode\u003ehf repos ls\u003c/code\u003e, \u003ccode\u003ehf models ls\u003c/code\u003e, and friends — \u003ccode\u003eps\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e still work as aliases.\u003c/p\u003e\n\u003cp\u003e⚠️ \u003cstrong\u003eBreaking changes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elist_jobs()\u003c/code\u003e now returns an \u003ccode\u003eIterable[JobInfo]\u003c/code\u003e instead of \u003ccode\u003elist[JobInfo]\u003c/code\u003e. If you indexed the result (\u003ccode\u003ejobs[0]\u003c/code\u003e), wrap it with \u003ccode\u003elist(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-f\u003c/code\u003e/\u003ccode\u003e--filter\u003c/code\u003e in \u003ccode\u003ehf jobs ls\u003c/code\u003e is deprecated. Use \u003ccode\u003e--status\u003c/code\u003e and \u003ccode\u003e--label\u003c/code\u003e instead. Glob patterns (\u003ccode\u003edata-*\u003c/code\u003e), negation (\u003ccode\u003ekey!=value\u003c/code\u003e), and filtering by \u003ccode\u003eid\u003c/code\u003e/\u003ccode\u003eimage\u003c/code\u003e/\u003ccode\u003ecommand\u003c/code\u003e are no longer supported.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003efrom huggingface_hub import list_jobs\r\n\u003ch1\u003eFilter by status and labels\u003c/h1\u003e\n\u003cp\u003elist_jobs(status=[\u0026quot;RUNNING\u0026quot;, \u0026quot;SCHEDULING\u0026quot;], labels={\u0026quot;env\u0026quot;: \u0026quot;prod\u0026quot;})\u003c/p\u003e\n\u003ch1\u003eIterate lazily\u003c/h1\u003e\n\u003cp\u003efor job in list_jobs():\nprint(job.id)\u003c/p\u003e\n\u003ch1\u003eMaterialize all results\u003c/h1\u003e\n\u003cp\u003eall_jobs = list(list_jobs())\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e# Filter by status and labels\r\nhf jobs ls --status running,scheduling --label env=prod --label team=ml\r\n\r\n# Paginate with --limit\r\nhf jobs ls -a --limit 500\r\nhf jobs ls -a --limit 0  # no limit\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e[Jobs] Add stage/label filtering to list_jobs API and CLI by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4395\"\u003e#4395\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[Jobs] Paginate list_jobs and add --limit to \u003ccode\u003ehf jobs ps\u003c/code\u003e by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4403\"\u003e#4403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[CLI] [Jobs] Rename job listing to 'hf jobs ls' (and keep 'hf jobs ps' alias) by \u003ca href=\"https://github.com/Wauplin\"\u003e\u003ccode\u003e@​Wauplin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4409\"\u003e#4409\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e📚 \u003cstrong\u003eDocumentation:\u003c/strong\u003e \u003ca href=\"https://huggingface.co/docs/huggingface_hub/main/en/guides/cli\"\u003eCLI guide\u003c/a\u003e, \u003ca href=\"https://huggingface.co/docs/huggingface_hub/main/en/guides/jobs\"\u003eJobs guide\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e🐛 Fix circular import on \u003ccode\u003efrom huggingface_hub import login\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003eA regression introduced in v1.20.0 caused \u003ccode\u003efrom huggingface_hub import login\u003c/code\u003e to raise an \u003ccode\u003eImportError\u003c/code\u003e on a fresh interpreter, due to a circular dependency between \u003ccode\u003e_oauth_device\u003c/code\u003e and \u003ccode\u003eutils._http\u003c/code\u003e. The fix moves \u003ccode\u003e_oauth_device.py\u003c/code\u003e into the \u003ccode\u003eutils\u003c/code\u003e layer so all imports resolve downward, eliminating the cycle. No lazy imports or workarounds required.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix circular import on \u003ccode\u003efrom huggingface_hub import login\u003c/code\u003e by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4385\"\u003e#4385\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🔧 Other QoL Improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRetry requests on httpx.RemoteProtocolError by \u003ca href=\"https://github.com/hanouticelina\"\u003e\u003ccode\u003e@​hanouticelina\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4398\"\u003e#4398\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📖 Documentation\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/huggingface/huggingface_hub/commit/aea9b9de1284f54862df99820f963d6030803860\"\u003e\u003ccode\u003eaea9b9d\u003c/code\u003e\u003c/a\u003e Release: v1.21.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/2e2ed568a0d8e3841d2fe9d192f17cdb30ccf129\"\u003e\u003ccode\u003e2e2ed56\u003c/code\u003e\u003c/a\u003e Release: v1.21.0.rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/4bd4c906cac546643ca5fe0ca08e301ce7a98b62\"\u003e\u003ccode\u003e4bd4c90\u003c/code\u003e\u003c/a\u003e [CLI] [Jobs] Rename job listing to 'hf jobs ls' (and keep 'hf jobs ps' alias)...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/fa3eb459eb3fdf15347930d7dc70f0a7e413d6e5\"\u003e\u003ccode\u003efa3eb45\u003c/code\u003e\u003c/a\u003e [Jobs] Paginate list_jobs and add --limit to \u003ccode\u003ehf jobs ps\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4403\"\u003e#4403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/ecfd4c5e88acfa885fc9146bf5df61d4de7b46a9\"\u003e\u003ccode\u003eecfd4c5\u003c/code\u003e\u003c/a\u003e [CLI] Fix ty/mypy errors with click 8.4.2 (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4408\"\u003e#4408\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/341469f1f87fb9932410fde9bdb81ac269a64727\"\u003e\u003ccode\u003e341469f\u003c/code\u003e\u003c/a\u003e Update hardware flavor enums (automated commit) (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4406\"\u003e#4406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/2fbcdfeec8a1bf689623ecb87afc7d5db4cd23bb\"\u003e\u003ccode\u003e2fbcdfe\u003c/code\u003e\u003c/a\u003e [i18n-HI] Add Hindi translation for guides overview (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4405\"\u003e#4405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/5bc6bfa7df18752f1adfd649816be315937cfa6f\"\u003e\u003ccode\u003e5bc6bfa\u003c/code\u003e\u003c/a\u003e [Jobs] Add stage/label filtering to list_jobs API and CLI (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4395\"\u003e#4395\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/d991f099f53c7439edbf9432c5137d2069199e5a\"\u003e\u003ccode\u003ed991f09\u003c/code\u003e\u003c/a\u003e Fix IndexError in filter_repo_objects on an empty pattern (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4402\"\u003e#4402\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/0df783fb8f3d1a37b00255007e9af78e4e9dca8f\"\u003e\u003ccode\u003e0df783f\u003c/code\u003e\u003c/a\u003e Retry requests on httpx.RemoteProtocolError (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4398\"\u003e#4398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/huggingface/huggingface_hub/compare/v1.18.0...v1.21.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-api-python-client` from 2.197.0 to 2.198.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-api-python-client/releases\"\u003egoogle-api-python-client's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.198.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-api-python-client/compare/v2.197.0...v2.198.0\"\u003e2.198.0\u003c/a\u003e (2026-06-23)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eadexchangebuyer2:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/a6b7a3c1312a0b843c6451f1502268232af1e08d\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/a6b7a3c1312a0b843c6451f1502268232af1e08d\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eadmin:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/39a7f8e64940d318ce50b5431ebca0ca6f044b4e\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/39a7f8e64940d318ce50b5431ebca0ca6f044b4e\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eagentregistry:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/47cc6885a57ff256a2878b8902f66f4d97e980be\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/47cc6885a57ff256a2878b8902f66f4d97e980be\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eaiplatform:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/bf9010bd3c1f6825858612032ad8722e53368738\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/bf9010bd3c1f6825858612032ad8722e53368738\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ealertcenter:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/60ed501536c048d4257f05fb44d01ac90afc45c6\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/60ed501536c048d4257f05fb44d01ac90afc45c6\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ealloydb:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/07ab81d00d9225efc0d1bfb54d7a2131537013bb\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/07ab81d00d9225efc0d1bfb54d7a2131537013bb\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eanalyticsadmin:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/d13cd0d5ec973a994a6409e4ccdd879ca5cdec24\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/d13cd0d5ec973a994a6409e4ccdd879ca5cdec24\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eanalyticshub:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/29d33229a8aca59cc2105ca57f10c5c34392eedf\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/29d33229a8aca59cc2105ca57f10c5c34392eedf\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eandroidmanagement:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0b2dcfba95c75409fcebe62b45d481e2b9cee79c\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0b2dcfba95c75409fcebe62b45d481e2b9cee79c\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eandroidpublisher:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/1dc37cdcddd779ca435abc9593b0bfb4e298770d\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/1dc37cdcddd779ca435abc9593b0bfb4e298770d\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eartifactregistry:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/001dba95de25008758d1955c7ff5db51e48606a9\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/001dba95de25008758d1955c7ff5db51e48606a9\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eassuredworkloads:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/2982b1986becfc8cf17768a86146cfac04338f81\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/2982b1986becfc8cf17768a86146cfac04338f81\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebackupdr:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0b64d9bb3d591fd521b86b21fdbc37f3dd793f43\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/0b64d9bb3d591fd521b86b21fdbc37f3dd793f43\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigqueryconnection:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/8e6a3e697448de8fd7128240f2615228db24e85c\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/8e6a3e697448de8fd7128240f2615228db24e85c\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigquerydatatransfer:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/012db99dae421f7b21f0e43b1df333b209cf3e15\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/012db99dae421f7b21f0e43b1df333b209cf3e15\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebigquery:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/9548dcf1aa1eeaa6524b6d9386178dac69c39096\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/9548dcf1aa1eeaa6524b6d9386178dac69c39096\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecalendar:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/399252cfd1bed4193f5821e66536d6a3a75f03c8\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/399252cfd1bed4193f5821e66536d6a3a75f03c8\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eces:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/2716cb2b0eb0d91686901d5153aa9581d1143bb4\"\u003ehttps://togithub.com/googleapis/google-api-python-client/commit/2716cb2b0eb0d91686901d5153aa9581d1143bb4\u003c/a\u003e (\u003ca href=\"https://github.com/googleapis/google-api-python-client/commit/ea0e936f22dcf01a92bbd7ad7ede5bbe773e7d3c\"\u003eea0e936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003echat:\u003c/strong\u003e Update the api \u003ca href=\"https://togithub.com/googleapis/google-api-python-client/commit/0ae828d973d7bb7f3e6f86bd4338b11b9f3c3e8f\"\u003ehttps://togithub.com/googleapis/goog...\n\n_Description has been truncated_","html_url":"https://github.com/francoisdeverdun/Estormi/pull/32","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/francoisdeverdun%2FEstormi/issues/32","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/32/packages"}},{"old_version":"3.28.0","new_version":"3.29.4","update_type":"minor","path":null,"pr_created_at":"2026-06-22T00:38:58.000Z","version_change":"3.28.0 → 3.29.4","issue":{"uuid":"4712521442","node_id":"PR_kwDOQFZ20c7o9OLl","number":108,"state":"open","title":"chore(deps): bump the python-minor group across 1 directory with 27 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-06-22T00:38:58.000Z","updated_at":"2026-06-22T00:39:36.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-minor","update_count":27,"packages":[{"name":"fastapi","old_version":"0.135.2","new_version":"0.138.0","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.41.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"sqlalchemy","old_version":"2.0.48","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.2","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"githubkit-schemas","old_version":"26.6.14","new_version":"26.6.20","repository_url":"https://github.com/yanyongyu/githubkit"},{"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.13.1","new_version":"2.14.2","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"slowapi","old_version":"0.1.9","new_version":"0.1.10","repository_url":"https://github.com/laurents/slowapi"},{"name":"sentry-sdk","old_version":"2.54.0","new_version":"2.63.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"starlette","old_version":"1.0.1","new_version":"1.3.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"filelock","old_version":"3.28.0","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"pytest","old_version":"9.0.2","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-asyncio","old_version":"1.3.0","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"pytest-cov","old_version":"7.0.0","new_version":"7.1.0","repository_url":"https://github.com/pytest-dev/pytest-cov"},{"name":"ruff","old_version":"0.15.5","new_version":"0.15.18","repository_url":"https://github.com/astral-sh/ruff"},{"name":"anyio","old_version":"4.12.0","new_version":"4.14.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"click","old_version":"8.3.1","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"httptools","old_version":"0.7.1","new_version":"0.8.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"limits","old_version":"5.6.0","new_version":"5.8.0","repository_url":"https://github.com/alisaifee/limits"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"watchfiles","old_version":"1.1.1","new_version":"1.2.0","repository_url":"https://github.com/samuelcolvin/watchfiles"},{"name":"wrapt","old_version":"2.0.1","new_version":"2.2.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"coverage","old_version":"7.12.0","new_version":"7.14.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"librt","old_version":"0.7.5","new_version":"0.11.0","repository_url":"https://github.com/mypyc/librt"},{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 27 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.135.2` | `0.138.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.41.0` | `0.49.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.32` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.48` | `2.0.51` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.2` |\n| [githubkit-schemas](https://github.com/yanyongyu/githubkit) | `26.6.14` | `26.6.20` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.2` |\n| [slowapi](https://github.com/laurents/slowapi) | `0.1.9` | `0.1.10` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.54.0` | `2.63.0` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.1` | `1.3.1` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.28.0` | `3.29.4` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.1.1` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `1.3.0` | `1.4.0` |\n| [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `7.0.0` | `7.1.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.5` | `0.15.18` |\n| [anyio](https://github.com/agronholm/anyio) | `4.12.0` | `4.14.0` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.4.1` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.7.1` | `0.8.0` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [limits](https://github.com/alisaifee/limits) | `5.6.0` | `5.8.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.41.5` | `2.47.0` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.1.1` | `1.2.0` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `2.0.1` | `2.2.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.12.0` | `7.14.2` |\n| [librt](https://github.com/mypyc/librt) | `0.7.5` | `0.11.0` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n\n\nUpdates `fastapi` from 0.135.2 to 0.138.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.138.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add support for \u003ccode\u003eapp.frontend(\u0026quot;/\u0026quot;, directory=\u0026quot;dist\u0026quot;)\u003c/code\u003e and \u003ccode\u003erouter.frontend(\u0026quot;/\u0026quot;, directory=\u0026quot;dist\u0026quot;)\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15800\"\u003e#15800\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\n\u003cul\u003e\n\u003cli\u003eRead the docs: \u003ca href=\"https://fastapi.tiangolo.com/tutorial/frontend/\"\u003eFrontend\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix typo in release notes. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15807\"\u003e#15807\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add \u003ccode\u003eapp.frontend()\u003c/code\u003e instructions to Agent Library Skill. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15805\"\u003e#15805\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 release notes link. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15802\"\u003e#15802\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 white space characters in bigger apps. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15801\"\u003e#15801\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 grammar, typos, and broken links in docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15694\"\u003e#15694\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🌐 Enable Hindi docs translations. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15554\"\u003e#15554\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🐛 Fix failing test, update format for raised errors. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15804\"\u003e#15804\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 test-alls-green. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15803\"\u003e#15803\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🔧 Enable checking \u003ccode\u003erelease-notes.md\u003c/code\u003e for typos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15796\"\u003e#15796\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📝 Tweak wording about deploying to FastAPI Cloud. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15793\"\u003e#15793\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\u003egpt-5.5\u003c/code\u003e model in \u003ccode\u003etranslate.py\u003c/code\u003e, specify \u003ccode\u003e-chat\u003c/code\u003e to avoid warnings. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15792\"\u003e#15792\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.137.2\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003eiter_route_contexts()\u003c/code\u003e for advanced use cases that used to use \u003ccode\u003erouter.routes\u003c/code\u003e (e.g. Jupyverse). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15785\"\u003e#15785\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🌐 Fix broken Markdown in Korean custom response docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15774\"\u003e#15774\u003c/a\u003e by \u003ca href=\"https://github.com/kooqooo\"\u003e\u003ccode\u003e@​kooqooo\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/15761\"\u003e#15761\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/15760\"\u003e#15760\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/15759\"\u003e#15759\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/15757\"\u003e#15757\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/15756\"\u003e#15756\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/15755\"\u003e#15755\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/15754\"\u003e#15754\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/15753\"\u003e#15753\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/15752\"\u003e#15752\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/15751\"\u003e#15751\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/15758\"\u003e#15758\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 sponsors: add BairesDev. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15787\"\u003e#15787\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 script to simplify previews. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15786\"\u003e#15786\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/4b83b0d409009c8de9df4070fe163838b1a700c7\"\u003e\u003ccode\u003e4b83b0d\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.138.0 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15808\"\u003e#15808\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/041cb0cdfa2d0f705d14ed07c2c2e0f92ef5f32c\"\u003e\u003ccode\u003e041cb0c\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/10393846ede7a2947cec594d15a43f813001cab4\"\u003e\u003ccode\u003e1039384\u003c/code\u003e\u003c/a\u003e 📝 Fix typo in release notes (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15807\"\u003e#15807\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0303491b69ff84a4632c0314e6db4df74f2f93f9\"\u003e\u003ccode\u003e0303491\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/190f6e2033c8b886b25027be284d8c8c1893f28c\"\u003e\u003ccode\u003e190f6e2\u003c/code\u003e\u003c/a\u003e 📝 Add Frontend instructions to Agent Library Skill (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15805\"\u003e#15805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/17945e5ab7f25234340c152a40d232a98857e079\"\u003e\u003ccode\u003e17945e5\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2260afaf433103c8104b34d256cf0b96b058823b\"\u003e\u003ccode\u003e2260afa\u003c/code\u003e\u003c/a\u003e 🐛 Fix failing test, update format for raised errors (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15804\"\u003e#15804\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/0cd5001d0ef80a07e2d775c5c75522391a3e06d7\"\u003e\u003ccode\u003e0cd5001\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7cb1ab6264bc03319832f553730b511192a0c0d3\"\u003e\u003ccode\u003e7cb1ab6\u003c/code\u003e\u003c/a\u003e 👷 Fix test-alls-green (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15803\"\u003e#15803\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9c7eceb00ff6e1d37980954418f7c9dab30a4cd5\"\u003e\u003ccode\u003e9c7eceb\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.2...0.138.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.41.0 to 0.49.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.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2971\"\u003eKludex/uvicorn#2971\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.47.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEagerly import the ASGI app in the parent process by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2919\"\u003eKludex/uvicorn#2919\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003essl_context_factory\u003c/code\u003e for custom \u003ccode\u003eSSLContext\u003c/code\u003e configuration by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2920\"\u003eKludex/uvicorn#2920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTreat \u003ccode\u003efd=0\u003c/code\u003e as a valid file descriptor with reload/workers by \u003ca href=\"https://github.com/eltoder\"\u003e\u003ccode\u003e@​eltoder\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2927\"\u003eKludex/uvicorn#2927\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\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\u003ch2\u003eVersion 0.45.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve forwarded client ports in proxy headers middleware 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/2903\"\u003eKludex/uvicorn#2903\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\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/2905\"\u003eKludex/uvicorn#2905\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively 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/2907\"\u003eKludex/uvicorn#2907\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise helpful \u003ccode\u003eImportError\u003c/code\u003e when PyYAML is missing for YAML log config 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/2906\"\u003eKludex/uvicorn#2906\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert empty context for ASGI runs 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/2911\"\u003eKludex/uvicorn#2911\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context 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/2912\"\u003eKludex/uvicorn#2912\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;Emit \u003ccode\u003ehttp.disconnect\u003c/code\u003e on server shutdown for streaming responses\u0026quot; (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2829\"\u003e#2829\u003c/a\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/2913\"\u003eKludex/uvicorn#2913\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/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2870\"\u003eKludex/uvicorn#2870\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.44.0...0.45.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.44.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eImplement websocket keepalive pings for 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/2888\"\u003eKludex/uvicorn#2888\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.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\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\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\u003ch2\u003e0.45.0 (April 21, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003e--reset-contextvars\u003c/code\u003e flag to isolate ASGI request context (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2912\"\u003e#2912\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003eos.PathLike\u003c/code\u003e for \u003ccode\u003elog_config\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2905\"\u003e#2905\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept \u003ccode\u003elog_level\u003c/code\u003e strings case-insensitively (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2907\"\u003e#2907\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/Kludex/uvicorn/commit/3ef2e3e08e3d9ad9572800f8bc54f3eaed9eab0a\"\u003e\u003ccode\u003e3ef2e3e\u003c/code\u003e\u003c/a\u003e Version 0.49.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2973\"\u003e#2973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/eeb64b1d1c95a14096ed3313377c74b485f558fc\"\u003e\u003ccode\u003eeeb64b1\u003c/code\u003e\u003c/a\u003e Consume duplicate forwarding headers in ProxyHeadersMiddleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/630f4aca14e79183617c71be714030842a1041c5\"\u003e\u003ccode\u003e630f4ac\u003c/code\u003e\u003c/a\u003e Make the watchfiles reload tests deterministic (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2972\"\u003e#2972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9154922e3730f7aba68ecc3ecbf536680ee8fd1c\"\u003e\u003ccode\u003e9154922\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group across 1 directory with 6 updates ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/739727a1d80e468d1e47e98bbd824ee9e3c9554b\"\u003e\u003ccode\u003e739727a\u003c/code\u003e\u003c/a\u003e Migrate docs deploy from Cloudflare Pages to Workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2967\"\u003e#2967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/be4a240488d3fb678a11b8e8f83505266f5f1de7\"\u003e\u003ccode\u003ebe4a240\u003c/code\u003e\u003c/a\u003e Gate docs preview deploy on Cloudflare token presence (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/c489d7e10dfe653a2bba914feedf2a632a026e6f\"\u003e\u003ccode\u003ec489d7e\u003c/code\u003e\u003c/a\u003e Bump httptools 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\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9f547bd82ef52bcba206e04170b359bd6daa25b3\"\u003e\u003ccode\u003e9f547bd\u003c/code\u003e\u003c/a\u003e Skip docs preview deploy for Dependabot PRs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2961\"\u003e#2961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/44446b894e37ca76830d6aa83df4349795400ed4\"\u003e\u003ccode\u003e44446b8\u003c/code\u003e\u003c/a\u003e Migrate documentation from MkDocs Material to Zensical (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2959\"\u003e#2959\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cfd659c4f18b526adce9c255c96707bab20af40c\"\u003e\u003ccode\u003ecfd659c\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions to 10.21.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2958\"\u003e#2958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.41.0...0.49.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.27 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\u003ch2\u003eVersion 0.0.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch 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/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating 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/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form 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/297\"\u003eKludex/python-multipart#297\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.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.30\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTreat only \u003ccode\u003e\u0026amp;\u003c/code\u003e as the urlencoded field separator 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/290\"\u003eKludex/python-multipart#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231 extended parameters in \u003ccode\u003eparse_options_header\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/291\"\u003eKludex/python-multipart#291\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.29...0.0.30\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.29...0.0.30\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.29\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e by \u003ca href=\"https://github.com/manunio\"\u003e\u003ccode\u003e@​manunio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003eKludex/python-multipart#270\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.28...0.0.29\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.28...0.0.29\u003c/a\u003e\u003c/p\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.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\u003ch2\u003e0.0.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.30 (2026-05-31)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eParse \u003ccode\u003eapplication/x-www-form-urlencoded\u003c/code\u003e bodies per the WHATWG URL standard, treating only \u003ccode\u003e\u0026amp;\u003c/code\u003e as a field separator \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/290\"\u003e#290\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eIgnore RFC 2231/5987 extended parameters (\u003ccode\u003ename*\u003c/code\u003e, \u003ccode\u003efilename*\u003c/code\u003e) in \u003ccode\u003eparse_options_header\u003c/code\u003e, keeping the plain parameter authoritative per \u003ca href=\"https://datatracker.ietf.org/doc/html/rfc7578#section-4.2\"\u003eRFC 7578 §4.2\u003c/a\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/291\"\u003e#291\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.29 (2026-05-17)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eHandle malformed RFC 2231 continuations in \u003ccode\u003eparse_options_header\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/270\"\u003e#270\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\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/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\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.27...0.0.32\"\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.48 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 `greenlet` from 3.3.2 to 3.5.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-greenlet/greenlet/blob/master/CHANGES.rst\"\u003egreenlet's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e3.5.2 (2026-06-17)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eThe minimum supported version of Python 3.15 is now 3.15b2.\u003c/li\u003e\n\u003cli\u003eFix some garbage-collection related crashes on free-threaded Python\n3.15. Thanks to Kumar Aditya in \u003ccode\u003ePR [#511](https://github.com/python-greenlet/greenlet/issues/511) \u0026lt;https://github.com/python-greenlet/greenlet/pull/511\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eImprove garbage collection of greenlets. This mostly applies to\nPython 3.15. Thanks to Kumar Aditya in \u003ccode\u003ePR [#512](https://github.com/python-greenlet/greenlet/issues/512) \u0026lt;https://github.com/python-greenlet/greenlet/pull/512\u0026gt;\u003c/code\u003e_.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.1 (2026-05-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd preliminary support for Python 3.15b1. This has not been\nreviewed by CPython core developers, but all tests pass. Binary\nwheels of this version won't work on earlier Python 3.15 builds and\nmay not work on later 3.15 builds.\u003c/li\u003e\n\u003cli\u003eFix the discrepancy in the way the two \u003ccode\u003egetcurrent\u003c/code\u003e APIs behave\nduring greenlet teardown. One API (the C API used by, e.g.,  gevent) raised a\n\u003ccode\u003eRuntimeError\u003c/code\u003e; the other (the Python \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e API)\nreturned \u003ccode\u003eNone\u003c/code\u003e. This second way is incompatible with greenlet's type\nannotations, so \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e now raises a\n\u003ccode\u003eRuntimeError\u003c/code\u003e as well.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.0 (2026-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the \u003ccode\u003eatexit\u003c/code\u003e callback. This callback caused greenlet APIs\nto become unavailable far too soon during interpreter shutdown. Now\nthey remain available while all \u003ccode\u003eatexit\u003c/code\u003e callbacks run. Sometime\nafter \u003ccode\u003ePy_IsFinalizing\u003c/code\u003e becomes true, they may begin misbehaving.\nBecause the order in which C extensions are finalized is undefined,\nC extensions that are sensitive to this need to check the results of\nthat function before invoking greenlet APIs. As a convenience,\n\u003ccode\u003ePyGreenlet_GetCurrent\u003c/code\u003e sets an exception and returns \u003ccode\u003eNULL\u003c/code\u003e\nwhen this happens (and \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e begins returning\n\u003ccode\u003eNone\u003c/code\u003e); other greenlet C API functions have undefined behaviour.\nMethods invoked directly on pre-existing \u003ccode\u003egreenlet.greenlet\u003c/code\u003e\nobjects will continue to function at least until the greenlet C\nextension has been garbage collected and finalized.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 508 \u0026lt;https://github.com/python-greenlet/greenlet/pull/508\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003c!-- 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-greenlet/greenlet/commit/0b64e9c851ae7bd8fc9b73d98031168237ee71db\"\u003e\u003ccode\u003e0b64e9c\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/3e28d276d01e74882f4cff1a4b54aed47153d617\"\u003e\u003ccode\u003e3e28d27\u003c/code\u003e\u003c/a\u003e Add change note for \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/512\"\u003e#512\u003c/a\u003e [skip ci]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6563c5e909a84c037c3d03e46851cd3016525a35\"\u003e\u003ccode\u003e6563c5e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/512\"\u003e#512\u003c/a\u003e from kumaraditya303/ft-mem\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/ab6eff60766e8954d890eef064ee2e1dd7c8b262\"\u003e\u003ccode\u003eab6eff6\u003c/code\u003e\u003c/a\u003e add ignore for win 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/41f5349a0f1b69ce180c90acb9a4cf2c84d612e7\"\u003e\u003ccode\u003e41f5349\u003c/code\u003e\u003c/a\u003e revert back to fails_leakcheck_on_py314_or_less\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/b0aac05734e9e41d4a592e0c913846990a9c7c24\"\u003e\u003ccode\u003eb0aac05\u003c/code\u003e\u003c/a\u003e set fail-fast=false and if condition correctly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/2f87f316613d401bbf1b1653595654654e572550\"\u003e\u003ccode\u003e2f87f31\u003c/code\u003e\u003c/a\u003e rename to ignores_leakcheck_on_py314_or_less\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/28bbde3de939acefe8e9d72fb179115b81392a87\"\u003e\u003ccode\u003e28bbde3\u003c/code\u003e\u003c/a\u003e add comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/35206b8dc536cfe92c09509432b4a301b5fede5f\"\u003e\u003ccode\u003e35206b8\u003c/code\u003e\u003c/a\u003e fix test and restrict tp_is_gc \u0026lt; 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/abdbab55b03334700fd264e523ac75926daba043\"\u003e\u003ccode\u003eabdbab5\u003c/code\u003e\u003c/a\u003e fix gil enabled\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `githubkit-schemas` from 26.6.14 to 26.6.20\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/yanyongyu/githubkit/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 `pydantic-settings` from 2.13.1 to 2.14.2\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.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThis is a security patch release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent \u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e from following symlinks outside \u003ccode\u003esecrets_dir\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/889\"\u003epydantic/pydantic-settings#889\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.2 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/890\"\u003epydantic/pydantic-settings#890\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cp\u003eFixes \u003ca href=\"https://github.com/pydantic/pydantic-settings/security/advisories/GHSA-4xgf-cpjx-pc3j\"\u003eGHSA-4xgf-cpjx-pc3j\u003c/a\u003e: \u003ccode\u003eNestedSecretsSettingsSource\u003c/code\u003e with \u003ccode\u003esecrets_nested_subdir=True\u003c/code\u003e could follow a symbolic link inside \u003ccode\u003esecrets_dir\u003c/code\u003e pointing outside it, reading out-of-tree files into settings values and bypassing the \u003ccode\u003esecrets_dir_max_size\u003c/code\u003e cap. Affected versions: \u003ccode\u003e\u0026gt;= 2.12.0, \u0026lt; 2.14.2\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.14.2\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.1...v2.14.2\u003c/a\u003e\u003c/p\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\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/d703bd717e5e07439fa89da2245eee6139413e9e\"\u003e\u003ccode\u003ed703bd7\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.2 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/890\"\u003e#890\u003c/a\u003e)\u003c/li\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `slowapi` from 0.1.9 to 0.1.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/laurents/slowapi/releases\"\u003eslowapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.1.10\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore: Update warn to warning py3.11 deprecation by \u003ca href=\"https://github.com/kevin868\"\u003e\u003ccode\u003e@​kevin868\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/200\"\u003elaurentS/slowapi#200\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: allow Requests to be sent to exempt_when by \u003ca href=\"https://github.com/colin99d\"\u003e\u003ccode\u003e@​colin99d\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/160\"\u003elaurentS/slowapi#160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: drop python 3.7 and 3.8 from CI checks by \u003ca href=\"https://github.com/laurentS\"\u003e\u003ccode\u003e@​laurentS\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/238\"\u003elaurentS/slowapi#238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: prepare 0.1.10 release by \u003ca href=\"https://github.com/ecly\"\u003e\u003ccode\u003e@​ecly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/212\"\u003elaurentS/slowapi#212\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/kevin868\"\u003e\u003ccode\u003e@​kevin868\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/200\"\u003elaurentS/slowapi#200\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/colin99d\"\u003e\u003ccode\u003e@​colin99d\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/160\"\u003elaurentS/slowapi#160\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ecly\"\u003e\u003ccode\u003e@​ecly\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/laurentS/slowapi/pull/212\"\u003elaurentS/slowapi#212\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/laurentS/slowapi/compare/v0.1.9...v0.1.10\"\u003ehttps://github.com/laurentS/slowapi/compare/v0.1.9...v0.1.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/laurentS/slowapi/blob/master/CHANGELOG.md\"\u003eslowapi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.1.10] - 2026-06-13\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded: allow usage of the request object in the except_when function (thanks \u003ca href=\"https://github.com/colin99d\"\u003e\u003ccode\u003e@​colin99d\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded more test exemption logic (thanks \u003ca href=\"https://github.com/colin99\"\u003e\u003ccode\u003e@​colin99\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix logger warning for Python 3.11 deprecation  (thanks \u003ca href=\"https://github.com/kevin868\"\u003e\u003ccode\u003e@​kevin868\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/laurentS/slowapi/commit/75799a3ec9498af10110068190356f704f838fe3\"\u003e\u003ccode\u003e75799a3\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/6f22eabc90a793d8c8459b6a8115c6f7fbb05bc5\"\u003e\u003ccode\u003e6f22eab\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/laurents/slowapi/issues/212\"\u003e#212\u003c/a\u003e from ecly/release-v0.1.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/5e2b9c108f79471fc96a5152bb69774894660cd1\"\u003e\u003ccode\u003e5e2b9c1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/laurents/slowapi/issues/238\"\u003e#238\u003c/a\u003e from laurentS/drop-old-python\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/a83ec7211ea664fcb65580a386845832c112892d\"\u003e\u003ccode\u003ea83ec72\u003c/code\u003e\u003c/a\u003e Update README\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/d1a20b6a4e0ba063bdb2160379be531c385c40a3\"\u003e\u003ccode\u003ed1a20b6\u003c/code\u003e\u003c/a\u003e Drop python 3.7 and 3.8 from CI checks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/8bf8b2ec55677aa3c9e0f9bed9f1a48f0b0b8d2e\"\u003e\u003ccode\u003e8bf8b2e\u003c/code\u003e\u003c/a\u003e Make exempt_when with request backwards compatible\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/eaf5ba76cd8657693bcec6dec281a35053b1164b\"\u003e\u003ccode\u003eeaf5ba7\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/a72bcc66597f620f04bf5be3676e40ed308d3a6a\"\u003e\u003ccode\u003ea72bcc6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/laurents/slowapi/issues/160\"\u003e#160\u003c/a\u003e from colin99d/master\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/42330fcddbf5ce22d18622ca14772cff256c2e74\"\u003e\u003ccode\u003e42330fc\u003c/code\u003e\u003c/a\u003e Merge branch 'laurentS:master' into master\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/laurentS/slowapi/commit/91145c087d658b6c3404935cd02155e291c2682b\"\u003e\u003ccode\u003e91145c0\u003c/code\u003e\u003c/a\u003e Fixed mypy error\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/laurents/slowapi/compare/v0.1.9...v0.1.10\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sentry-sdk` from 2.54.0 to 2.63.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/getsentry/sentry-python/releases\"\u003esentry-sdk's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.63.0\u003c/h2\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003ch4\u003eFastapi\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePrevent double wrapping of sync handlers on FastAPI \u0026gt;= 0.137 by \u003ca href=\"https://github.com/jhonny-on\"\u003e\u003ccode\u003e@​jhonny-on\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6569\"\u003e#6569\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse effective_route_context path for prefixed routers by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6572\"\u003e#6572\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eOther\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003e(asgi) Gate query string and client IP behind send_default_pii by \u003ca href=\"https://github.com/ericapisani\"\u003e\u003ccode\u003e@​ericapisani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6501\"\u003e#6501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(serializer) Avoid creating reference cycles on every call by \u003ca href=\"https://github.com/Malkiz223\"\u003e\u003ccode\u003e@​Malkiz223\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6563\"\u003e#6563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(user) Set \u003ccode\u003euser.ip_address\u003c/code\u003e on telemetry if present by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6555\"\u003e#6555\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove 0000 trace_id fallbacks by \u003ca href=\"https://github.com/sl0thentr0py\"\u003e\u003ccode\u003e@​sl0thentr0py\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6570\"\u003e#6570\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMANIFEST.in: Graft tests directory. by \u003ca href=\"https://github.com/charlesroelli\"\u003e\u003ccode\u003e@​charlesroelli\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6237\"\u003e#6237\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal Changes 🔧\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e(fastapi) Verify request info capture with POST endpoints by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6287\"\u003e#6287\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e(starlette) Verify request info capture with POST endpoints by \u003ca href=\"https://github.com/alexander-alderman-webb\"\u003e\u003ccode\u003e@​alexander-alderman-webb\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/6269\"\u003e#6269\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.62.0\u003c/h2\u003e\n\u003ch3\u003eNew Features ✨\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd integration for \u003ccode\u003eaiomysql\u003c/code\u003e by \u003ca href=\"https://github.com/tonal\"\u003e\u003ccode\u003e@​tonal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/getsentry/sentry-python/pull/4703\"\u003e#4703\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWe're adding support for the \u003ccode\u003eaiomysql\u003c/code\u003e package. To enable the integration, add it to your \u003ccode\u003eintegrations\u003c/code\u003e list:\u003c/p\u003e\n\u003cpre lang=\"python\"\u003e\u003ccode\u003eimport sentry_sdk\nfrom sentry_sdk.integrations.aiomysql import AioMySQLIntegration\n\u003cp\u003esentry_sdk.init(\ntraces_sample_rate=1.0,\nintegrations=[AioMySQLIntegration()],\n)\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport HTTPX2 by \u003ca href=\"https://github.com/sentrivana\"\u003e\u003ccode\u003e@​sentrivana\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https:...\n\n_Description has been truncated_","html_url":"https://github.com/Dashtid/portfolio-site/pull/108","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dashtid%2Fportfolio-site/issues/108","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/108/packages"}},{"old_version":"3.29.3","new_version":"3.29.4","update_type":"patch","path":null,"pr_created_at":"2026-06-18T04:13:34.000Z","version_change":"3.29.3 → 3.29.4","issue":{"uuid":"4689083271","node_id":"PR_kwDOMCX0T87nxRvK","number":161,"state":"closed","title":"Bump filelock from 3.29.3 to 3.29.4","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-04T21:24:20.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-18T04:13:34.000Z","updated_at":"2026-07-04T21:24:21.000Z","time_to_close":1444246,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"filelock","old_version":"3.29.3","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.29.3 to 3.29.4.\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.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\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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.3...3.29.4\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.29.3\u0026new-version=3.29.4)](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/DecaturMakers/machine-access-control/pull/161","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/DecaturMakers%2Fmachine-access-control/issues/161","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/161/packages"}},{"old_version":"3.29.3","new_version":"3.29.4","update_type":"patch","path":null,"pr_created_at":"2026-06-15T10:51:46.000Z","version_change":"3.29.3 → 3.29.4","issue":{"uuid":"4664377401","node_id":"PR_kwDOAMpNN87mf5cl","number":12936,"state":"open","title":"Bump filelock from 3.29.3 to 3.29.4","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-15T10:51:46.000Z","updated_at":"2026-06-15T11:04:39.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"filelock","old_version":"3.29.3","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.29.3 to 3.29.4.\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.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\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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.3...3.29.4\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.29.3\u0026new-version=3.29.4)](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/aio-libs/aiohttp/pull/12936","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/aio-libs%2Faiohttp/issues/12936","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12936/packages"}},{"old_version":"3.29.0","new_version":"3.29.4","update_type":"patch","path":null,"pr_created_at":"2026-06-15T06:17:23.000Z","version_change":"3.29.0 → 3.29.4","issue":{"uuid":"4662550654","node_id":"PR_kwDOSJGIYs7mZ3Cy","number":38,"state":"open","title":"chore(deps-dev)(deps-dev): Bump the dev-dependencies group across 1 directory with 16 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-15T06:17:23.000Z","updated_at":"2026-06-15T06:18:25.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps-dev)(deps-dev): Bump","group_name":"dev-dependencies","update_count":16,"packages":[{"name":"ruff","old_version":"0.15.11","new_version":"0.15.17","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.0","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pip-audit","old_version":"2.10.0","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"},{"name":"coverage","old_version":"7.13.5","new_version":"7.14.1","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"cyclonedx-python-lib","old_version":"11.7.0","new_version":"11.10.0","repository_url":"https://github.com/CycloneDX/cyclonedx-python-lib"},{"name":"distlib","old_version":"0.4.0","new_version":"0.4.3","repository_url":"https://github.com/pypa/distlib"},{"name":"filelock","old_version":"3.29.0","new_version":"3.29.4","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"msgpack","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"packaging","old_version":"26.1","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pip","old_version":"26.0.1","new_version":"26.1.2","repository_url":"https://github.com/pypa/pip"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"python-discovery","old_version":"1.2.2","new_version":"1.4.2","repository_url":"https://github.com/tox-dev/python-discovery"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"ty","old_version":"0.0.32","new_version":"0.0.49","repository_url":"https://github.com/astral-sh/ty"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"virtualenv","old_version":"21.2.4","new_version":"21.5.0","repository_url":"https://github.com/pypa/virtualenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dev-dependencies group with 16 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.11` | `0.15.17` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.0` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.10.0` | `2.10.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.5` | `7.14.1` |\n| [cyclonedx-python-lib](https://github.com/CycloneDX/cyclonedx-python-lib) | `11.7.0` | `11.10.0` |\n| [distlib](https://github.com/pypa/distlib) | `0.4.0` | `0.4.3` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.29.0` | `3.29.4` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.1.2` | `1.2.0` |\n| [packaging](https://github.com/pypa/packaging) | `26.1` | `26.2` |\n| [pip](https://github.com/pypa/pip) | `26.0.1` | `26.1.2` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [python-discovery](https://github.com/tox-dev/python-discovery) | `1.2.2` | `1.4.2` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.32` | `0.0.49` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.2.4` | `21.5.0` |\n\n\nUpdates `ruff` from 0.15.11 to 0.15.17\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.17\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-11.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25614\"\u003e#25614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eignore\u003c/code\u003e comments within a \u003ccode\u003edisable\u003c/code\u003e/\u003ccode\u003eenable\u003c/code\u003e pair (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25845\"\u003e#25845\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrioritize human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25869\"\u003e#25869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRespect diagnostic start and parent ranges and trailing comments in \u003ccode\u003eruff:ignore\u003c/code\u003e suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25673\"\u003e#25673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Add \u003ccode\u003etrio.as_safe_channel\u003c/code\u003e to safe decorators (\u003ccode\u003eASYNC119\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25775\"\u003e#25775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pytest-style\u003c/code\u003e] Also check \u003ccode\u003epytest_asyncio\u003c/code\u003e fixtures (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25375\"\u003e#25375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Ban \u003ccode\u003epytest\u003c/code\u003e autouse fixtures (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25477\"\u003e#25477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e automatically (\u003ccode\u003eUP007\u003c/code\u003e, \u003ccode\u003eUP045\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23259\"\u003e#23259\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix diagnostic when \u003ccode\u003eruff:enable\u003c/code\u003e or \u003ccode\u003eruff:disable\u003c/code\u003e appears where \u003ccode\u003eruff:ignore\u003c/code\u003e is expected (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25700\"\u003e#25700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Preserve leading empty literals to avoid syntax errors (\u003ccode\u003eUP032\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25491\"\u003e#25491\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-pytest-style\u003c/code\u003e] Clarify diagnostic message for single parameters (\u003ccode\u003ePT007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25592\"\u003e#25592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003enumpy\u003c/code\u003e] Drop autofix for \u003ccode\u003enp.in1d\u003c/code\u003e (\u003ccode\u003eNPY201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25612\"\u003e#25612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Exempt Python version comparisons (\u003ccode\u003ePLR2004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25743\"\u003e#25743\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReserve AST \u003ccode\u003eVec\u003c/code\u003es with correct capacity for common cases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25451\"\u003e#25451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve whitespace for Quarto cell option comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25641\"\u003e#25641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rule names in \u003ccode\u003eruff rule\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25640\"\u003e#25640\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix playground diagnostics scrollbars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25642\"\u003e#25642\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/SuryanshSS1011\"\u003e\u003ccode\u003e@​SuryanshSS1011\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/romero-deshaw\"\u003e\u003ccode\u003e@​romero-deshaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/karlhillx\"\u003e\u003ccode\u003e@​karlhillx\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carljm\"\u003e\u003ccode\u003e@​carljm\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.17\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-11.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow human-readable names in suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25614\"\u003e#25614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix handling of \u003ccode\u003eignore\u003c/code\u003e comments within a \u003ccode\u003edisable\u003c/code\u003e/\u003ccode\u003eenable\u003c/code\u003e pair (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25845\"\u003e#25845\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrioritize human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25869\"\u003e#25869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRespect diagnostic start and parent ranges and trailing comments in \u003ccode\u003eruff:ignore\u003c/code\u003e suppressions (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25673\"\u003e#25673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-async\u003c/code\u003e] Add \u003ccode\u003etrio.as_safe_channel\u003c/code\u003e to safe decorators (\u003ccode\u003eASYNC119\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25775\"\u003e#25775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pytest-style\u003c/code\u003e] Also check \u003ccode\u003epytest_asyncio\u003c/code\u003e fixtures (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25375\"\u003e#25375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eruff\u003c/code\u003e] Ban \u003ccode\u003epytest\u003c/code\u003e autouse fixtures (\u003ccode\u003eRUF076\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25477\"\u003e#25477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Add \u003ccode\u003efrom __future__ import annotations\u003c/code\u003e automatically (\u003ccode\u003eUP007\u003c/code\u003e, \u003ccode\u003eUP045\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23259\"\u003e#23259\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix diagnostic when \u003ccode\u003eruff:enable\u003c/code\u003e or \u003ccode\u003eruff:disable\u003c/code\u003e appears where \u003ccode\u003eruff:ignore\u003c/code\u003e is expected (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25700\"\u003e#25700\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Preserve leading empty literals to avoid syntax errors (\u003ccode\u003eUP032\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25491\"\u003e#25491\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-pytest-style\u003c/code\u003e] Clarify diagnostic message for single parameters (\u003ccode\u003ePT007\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25592\"\u003e#25592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003enumpy\u003c/code\u003e] Drop autofix for \u003ccode\u003enp.in1d\u003c/code\u003e (\u003ccode\u003eNPY201\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25612\"\u003e#25612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epylint\u003c/code\u003e] Exempt Python version comparisons (\u003ccode\u003ePLR2004\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25743\"\u003e#25743\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReserve AST \u003ccode\u003eVec\u003c/code\u003es with correct capacity for common cases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25451\"\u003e#25451\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFormatter\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve whitespace for Quarto cell option comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25641\"\u003e#25641\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCLI\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow rule names in \u003ccode\u003eruff rule\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25640\"\u003e#25640\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix playground diagnostics scrollbars (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25642\"\u003e#25642\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/SuryanshSS1011\"\u003e\u003ccode\u003e@​SuryanshSS1011\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/romero-deshaw\"\u003e\u003ccode\u003e@​romero-deshaw\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/karlhillx\"\u003e\u003ccode\u003e@​karlhillx\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carljm\"\u003e\u003ccode\u003e@​carljm\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7c645a9a1be8258b9f9e005208a55a0b7e8e18f0\"\u003e\u003ccode\u003e7c645a9\u003c/code\u003e\u003c/a\u003e Bump 0.15.17 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25872\"\u003e#25872\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/f381eb1d54997cfbfa6f63c15dd2d760f70e85e1\"\u003e\u003ccode\u003ef381eb1\u003c/code\u003e\u003c/a\u003e Prioritize human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25869\"\u003e#25869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b9b4546ad27d8fd12acc979e312a3ee25ef8ac4f\"\u003e\u003ccode\u003eb9b4546\u003c/code\u003e\u003c/a\u003e Minor workflow simplification (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25870\"\u003e#25870\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1e77ba02570bbe4952f7cf0e4ebb97b8b4e6e58d\"\u003e\u003ccode\u003e1e77ba0\u003c/code\u003e\u003c/a\u003e [ty] Move \u003ccode\u003ePreformattedBlockScanner\u003c/code\u003e to format-agnostic location. (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25856\"\u003e#25856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/6f2b772285aa478e8aee3f4b54dfa9ce903a0ce1\"\u003e\u003ccode\u003e6f2b772\u003c/code\u003e\u003c/a\u003e [ty] Preserve nominal type of enum.property instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25849\"\u003e#25849\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/be4777c8766a38d405a69948989cdfa2674adaae\"\u003e\u003ccode\u003ebe4777c\u003c/code\u003e\u003c/a\u003e [ty] Fix site-package error when multiple versions of pythons are installed i...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/53f6ff7200983a67778fcba7106019d2615846f0\"\u003e\u003ccode\u003e53f6ff7\u003c/code\u003e\u003c/a\u003e Allow human-readable names in suppression comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25614\"\u003e#25614\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/67403254192f3541bd7e1027c8f1805cf7a9c2be\"\u003e\u003ccode\u003e6740325\u003c/code\u003e\u003c/a\u003e [ty] Restrict uncached raw signature access (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25866\"\u003e#25866\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/970b1bf4a4d83359c9e28cad5f127ebbd6769682\"\u003e\u003ccode\u003e970b1bf\u003c/code\u003e\u003c/a\u003e Auto-update snapshots when syncing typeshed (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25841\"\u003e#25841\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/0785793750fd6c74124a189259822f1a28eb5c13\"\u003e\u003ccode\u003e0785793\u003c/code\u003e\u003c/a\u003e Fix handling of \u003ccode\u003eignore\u003c/code\u003e comments within a \u003ccode\u003edisable\u003c/code\u003e/\u003ccode\u003eenable\u003c/code\u003e pair (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25845\"\u003e#25845\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.17\"\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.3 to 9.1.0\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.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\u003cp\u003eUse the \u003ccode\u003enode\u003c/code\u003e parameter instead for fixture scoping. This enables more robust node-based\nmatching instead of string prefix matching.\nIf you've used \u003ccode\u003enodeid=None\u003c/code\u003e, pass \u003ccode\u003enode=session\u003c/code\u003e instead.\u003c/p\u003e\n\u003cp\u003eThis will be removed in pytest 10.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14335\"\u003e#14335\u003c/a\u003e: The method of configuring hooks using markers, deprecated since pytest 7.2, is now scheduled to be removed in pytest 10.\nSee \u003ccode\u003ehook-markers\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/14434\"\u003e#14434\u003c/a\u003e: The \u003ccode\u003e--pastebin\u003c/code\u003e option is now deprecated.\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/b2522cf0b11fb33ecc1f4895fa1dffbb9252a63d\"\u003e\u003ccode\u003eb2522cf\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/368d2fca78e86ac79ec269bb078fcb1259a94fed\"\u003e\u003ccode\u003e368d2fc\u003c/code\u003e\u003c/a\u003e [refactor] Tighten \u003ccode\u003eSetComparisonFunction\u003c/code\u003e to \u003ccode\u003eIterator[str]\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14587\"\u003e#14587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ff77cd8b66b43a88c26ca54384bbcab72d079497\"\u003e\u003ccode\u003eff77cd8\u003c/code\u003e\u003c/a\u003e [refactor] Make base assertion comparisons return an iterator instead of a li...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d8491a4ecf971800de0479ef55c7f5292c54937\"\u003e\u003ccode\u003e0d8491a\u003c/code\u003e\u003c/a\u003e build(deps): Bump actions/stale from 10.2.0 to 10.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/4a809d9c892f6abb5ba92b77b06f1dd878f4660a\"\u003e\u003ccode\u003e4a809d9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14568\"\u003e#14568\u003c/a\u003e from pytest-dev/register-fixture\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/5dfa38541becfb77d0f52cac4cc8cce71849ab61\"\u003e\u003ccode\u003e5dfa385\u003c/code\u003e\u003c/a\u003e Fix recursion traceback test to cover all styles (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14582\"\u003e#14582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/f52ff0c1778c15038cf2bbb00b7668dac674cc26\"\u003e\u003ccode\u003ef52ff0c\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003epytest.register_fixture\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/a8ac094e80df788aec844794170b126eab0be7a4\"\u003e\u003ccode\u003ea8ac094\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14567\"\u003e#14567\u003c/a\u003e from pytest-dev/more-visibility-deprecate\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e5620cd21ec62f5a5f9a5141a3c76fb3953729b6\"\u003e\u003ccode\u003ee5620cd\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14577\"\u003e#14577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/2ce9c6d94eb691ea4da7f91f330602cbb67a6daf\"\u003e\u003ccode\u003e2ce9c6d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14540\"\u003e#14540\u003c/a\u003e from minbang930/fix-14533-doctest-module-fixtures\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.0.3...9.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pip-audit` from 2.10.0 to 2.10.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/pip-audit/releases\"\u003epip-audit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.10.1\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\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/pip-audit/blob/main/CHANGELOG.md\"\u003epip-audit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[2.10.1]\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a \u003ccode\u003eKeyError\u003c/code\u003e crash when an OSV vulnerability record contains an\n\u003ccode\u003eaffected\u003c/code\u003e entry that omits the optional \u003ccode\u003eranges\u003c/code\u003e field\n(\u003ca href=\"https://redirect.github.com/pypa/pip-audit/pull/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\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/pip-audit/commit/8894eb8cee033531a1fbd9f2fb160892531c14e3\"\u003e\u003ccode\u003e8894eb8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1056\"\u003e#1056\u003c/a\u003e from pypa/copilot/release-2101\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/1c625b7f4fd5790e6a05723b2ad9e670629a061d\"\u003e\u003ccode\u003e1c625b7\u003c/code\u003e\u003c/a\u003e Update version in README.md to 2.10.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/fd2094bb7b58438176d65722d77c021750a16f84\"\u003e\u003ccode\u003efd2094b\u003c/code\u003e\u003c/a\u003e Prep 2.10.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/58d24880a0053c9ec3ce7e3c35aef6d51d600921\"\u003e\u003ccode\u003e58d2488\u003c/code\u003e\u003c/a\u003e build(deps): bump github/codeql-action from 4.35.2 to 4.36.1 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1052\"\u003e#1052\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/8df942058831baec6258f712d42a0bcb03729134\"\u003e\u003ccode\u003e8df9420\u003c/code\u003e\u003c/a\u003e build(deps): bump zizmorcore/zizmor-action from 0.5.3 to 0.5.6 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1044\"\u003e#1044\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/3f618d3cde900cd89545d6a3fa4d41612f3b83df\"\u003e\u003ccode\u003e3f618d3\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1053\"\u003e#1053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/4849132c9ec7a2b0b160ec4276408659d0cdcede\"\u003e\u003ccode\u003e4849132\u003c/code\u003e\u003c/a\u003e Restrict OIDC token to publish job (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1050\"\u003e#1050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/c1eb69a71306be7a3ffbbf2bdb59a4cb4eeaa414\"\u003e\u003ccode\u003ec1eb69a\u003c/code\u003e\u003c/a\u003e Fix KeyError when OSV affected entry omits optional \u003ccode\u003eranges\u003c/code\u003e field (\u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1046\"\u003e#1046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/68de07fb9637027f61df7df2620da93f9deb11ec\"\u003e\u003ccode\u003e68de07f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pypa/pip-audit/issues/1054\"\u003e#1054\u003c/a\u003e from pypa/fix/1047\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/pip-audit/commit/ef31c9ea7ae844d6f9c1f85efceb9d4a2533ef5a\"\u003e\u003ccode\u003eef31c9e\u003c/code\u003e\u003c/a\u003e Formatting fixes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pypa/pip-audit/compare/v2.10.0...v2.10.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.13.5 to 7.14.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.14.1 — 2026-05-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the HTML report used typographic niceties to make file paths more\nreadable by adding a small amount of space around slashes. Those spaces\ninterfered with searching the page for file paths of interest. Now the report\nuses CSS to accomplish the same visual tweak so that searches with slashes\nwork correctly. Closes \u003ccode\u003eissue 2170\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAdd a 3.16 PyPI classifier \u0026lt;hugo-316_\u0026gt;\u003c/code\u003e_ since we test on the 3.16 main\nbranch.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2170: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2170\"\u003ecoveragepy/coveragepy#2170\u003c/a\u003e\n.. _hugo-316: \u003ca href=\"https://mastodon.social/@hugovk/116588523571204490\"\u003ehttps://mastodon.social/@​hugovk/116588523571204490\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-0:\u003c/p\u003e\n\u003ch2\u003eVersion 7.14.0 — 2026-05-10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFeature: now when running one of the reporting commands, if there are\nparallel data files that need combining, they will be implicitly combined\nbefore creating the report. There is no option to avoid the combination; let\nus know if you have a use case that requires it.  Thanks, \u003ccode\u003eTim Hatch \u0026lt;pull 2162_\u0026gt;\u003c/code\u003e\u003cem\u003e. Closes \u003ccode\u003eissue 1781\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the output from \u003ccode\u003ecombine\u003c/code\u003e was too verbose, listing each file\nconsidered. Now it shows a single line with the counts of files combined,\nfiles skipped, and files with errors. The \u003ccode\u003e-q\u003c/code\u003e flag suppresses this line.\nThe old detailed lines are available with the new \u003ccode\u003e--debug=combine\u003c/code\u003e option.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: running a Python file through a symlink now sets the sys.path correctly,\nmatching regular Python behavior. Fixes \u003ccode\u003eissue 2157\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003eCollector.flush_data\u003c/code\u003e could fail with \u0026quot;RuntimeError: Set changed\nsize during iteration\u0026quot; when a tracer in another thread added a line to the\nper-file set that \u003ccode\u003eadd_lines\u003c/code\u003e (or \u003ccode\u003eadd_arcs\u003c/code\u003e) was iterating. The values\npassed to \u003ccode\u003eCoverageData\u003c/code\u003e are now snapshotted via \u003ccode\u003edict.copy()\u003c/code\u003e and\n\u003ccode\u003eset.copy()\u003c/code\u003e, which are atomic under the GIL. Thanks, \u003ccode\u003eAlex Vandiver \u0026lt;pull 2165_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the soft keyword \u003ccode\u003elazy\u003c/code\u003e is now bolded in HTML reports.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWe are no longer testing eventlet support. Eventlet started issuing stern\ndeprecation warnings that break our tests. Our support code is still there.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 1781: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/1781\"\u003ecoveragepy/coveragepy#1781\u003c/a\u003e\n.. _issue 2157: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2157\"\u003ecoveragepy/coveragepy#2157\u003c/a\u003e\n.. _pull 2162: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2162\"\u003ecoveragepy/coveragepy#2162\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/64d9b66fd852c1920ffe6cb8b58d7e4fdae90226\"\u003e\u003ccode\u003e64d9b66\u003c/code\u003e\u003c/a\u003e docs: correct the date for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6fa7dd44c25e1a660252faaf030dd8f2f1e20861\"\u003e\u003ccode\u003e6fa7dd4\u003c/code\u003e\u003c/a\u003e chore: bump actions/dependency-review-action (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2181\"\u003e#2181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/078afae263597b004eb9a85d880b6a65008e75ed\"\u003e\u003ccode\u003e078afae\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/cb4f028a36e008b664739d04f387b90ee5105044\"\u003e\u003ccode\u003ecb4f028\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ae2d09f562271c6169534e1c242d015dd0823dda\"\u003e\u003ccode\u003eae2d09f\u003c/code\u003e\u003c/a\u003e Merge branch 'nedbat/classifire-316-kits'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2c3568b2e041f2c0dbbc8eaa3919d46ee891b743\"\u003e\u003ccode\u003e2c3568b\u003c/code\u003e\u003c/a\u003e build: declare 3.16 compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/faa68f8601cf098701b68976dbb73b9fc23c9297\"\u003e\u003ccode\u003efaa68f8\u003c/code\u003e\u003c/a\u003e chore: bump github/codeql-action in the action-dependencies group (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2173\"\u003e#2173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/eb55feedf54b363e3d0b678f20abf3bfd3551a88\"\u003e\u003ccode\u003eeb55fee\u003c/code\u003e\u003c/a\u003e test: we don't need PyPy \u0026lt; 7.3.22 anymore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ac168fe53c04cdb2ff5231c0c4e5045021ee339b\"\u003e\u003ccode\u003eac168fe\u003c/code\u003e\u003c/a\u003e test: the text summary should show missing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/fed4bd2db3c1cb2916a07791041da693fbf8e996\"\u003e\u003ccode\u003efed4bd2\u003c/code\u003e\u003c/a\u003e chore: upgrade virtualenv\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.13.5...7.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cyclonedx-python-lib` from 11.7.0 to 11.10.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/releases\"\u003ecyclonedx-python-lib's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev11.10.0 (2026-06-11)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eLossless flattening of dependency graph during JSON serialization (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/993\"\u003e#993\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/d0e10ca147dfece8bd7c76b104d7579255879679\"\u003e\u003ccode\u003ed0e10ca\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eTyping in \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/998\"\u003e#998\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/988a9372a676358b29e67573c9f39d94121824bc\"\u003e\u003ccode\u003e988a937\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove docs of \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/996\"\u003e#996\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/9beaf5c6b35a8739727572c0e351063849d876fc\"\u003e\u003ccode\u003e9beaf5c\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/997\"\u003e#997\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/78b8d8b94b26df14d0194b3d44a5db8a76f1fa47\"\u003e\u003ccode\u003e78b8d8b\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove \u003ccode\u003eoutput.BomRefDiscriminator\u003c/code\u003e to \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/995\"\u003e#995\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/3bb87aabbc421aabac307305217c7975e63b43eb\"\u003e\u003ccode\u003e3bb87aa\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003econtrib.bom.utils.bomdependencygraphflatmerger._flatten_merge\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/999\"\u003e#999\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/a8579b87f7e121ebbec16b9f05bdb3b4de11e71c\"\u003e\u003ccode\u003ea8579b8\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: move \u003ccode\u003eoutput.BomRefDiscriminator\u003c/code\u003e to \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/995\"\u003eCycloneDX/cyclonedx-python-lib#995\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: improve docs of \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/996\"\u003eCycloneDX/cyclonedx-python-lib#996\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/997\"\u003eCycloneDX/cyclonedx-python-lib#997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typing in \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/998\"\u003eCycloneDX/cyclonedx-python-lib#998\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eperf: \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger._flatten_merge\u003c/code\u003e by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/999\"\u003eCycloneDX/cyclonedx-python-lib#999\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: lossless flattening of dependency graph during JSON serialization by \u003ca href=\"https://github.com/jkowalleck\"\u003e\u003ccode\u003e@​jkowalleck\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/993\"\u003eCycloneDX/cyclonedx-python-lib#993\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.9.0...v11.10.0\"\u003ehttps://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.9.0...v11.10.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev11.9.0 (2026-06-08)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for license expression details (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/908\"\u003e#908\u003c/a\u003e, \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/b50238102553dc215b08796ea914072294f69489\"\u003e\u003ccode\u003eb502381\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore(deps): bump snok/install-poetry from 1.4.1 to 1.4.2 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/990\"\u003eCycloneDX/cyclonedx-python-lib#990\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): update m2r2 requirement from \u0026gt;=0.3.2 to \u0026gt;=0.3.4 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/CycloneDX/cyclonedx-python-lib/pull/970\"\u003eCycloneDX/cyclonedx-python-lib#970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add support for license expression details by \u003ca href=\"https://github.com/Churro\"\u003e\u003ccode\u003e@​Churro\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/908\"\u003eCycloneDX/cyclonedx-python-lib#908\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.8.0...v11.9.0\"\u003ehttps://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.8.0...v11.9.0\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/CycloneDX/cyclonedx-python-lib/blob/main/CHANGELOG.md\"\u003ecyclonedx-python-lib's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev11.10.0 (2026-06-11)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eLossless flattening of dependency graph during JSON serialization\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/993\"\u003e#993\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/d0e10ca147dfece8bd7c76b104d7579255879679\"\u003e\u003ccode\u003ed0e10ca\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eTyping in \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/998\"\u003e#998\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/988a9372a676358b29e67573c9f39d94121824bc\"\u003e\u003ccode\u003e988a937\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove docs of \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/996\"\u003e#996\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/9beaf5c6b35a8739727572c0e351063849d876fc\"\u003e\u003ccode\u003e9beaf5c\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/997\"\u003e#997\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/78b8d8b94b26df14d0194b3d44a5db8a76f1fa47\"\u003e\u003ccode\u003e78b8d8b\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMove \u003ccode\u003eoutput.BomRefDiscriminator\u003c/code\u003e to \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/995\"\u003e#995\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/3bb87aabbc421aabac307305217c7975e63b43eb\"\u003e\u003ccode\u003e3bb87aa\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003econtrib.bom.utils.bomdependencygraphflatmerger._flatten_merge\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/999\"\u003e#999\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/a8579b87f7e121ebbec16b9f05bdb3b4de11e71c\"\u003e\u003ccode\u003ea8579b8\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev11.9.0 (2026-06-08)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for license expression details\n(\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/908\"\u003e#908\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/b50238102553dc215b08796ea914072294f69489\"\u003e\u003ccode\u003eb502381\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev11.8.0 (2026-06-04)\u003c/h2\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate CDX summary (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/pull/951\"\u003e#951\u003c/a\u003e,\n\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/752b1620a23e319add81c505fe7197a2ae3cca06\"\u003e\u003ccode\u003e752b162\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/CycloneDX/cyclonedx-python-lib/commit/bdeaa91c5319e1771a543dd2b562fc5e3d93548b\"\u003e\u003ccode\u003ebdeaa91\u003c/code\u003e\u003c/a\u003e chore(release): 11.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/d0e10ca147dfece8bd7c76b104d7579255879679\"\u003e\u003ccode\u003ed0e10ca\u003c/code\u003e\u003c/a\u003e fix: lossless flattening of dependency graph during JSON serialization (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/993\"\u003e#993\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/a8579b87f7e121ebbec16b9f05bdb3b4de11e71c\"\u003e\u003ccode\u003ea8579b8\u003c/code\u003e\u003c/a\u003e perf: \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger._flatten_merge\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/999\"\u003e#999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/988a9372a676358b29e67573c9f39d94121824bc\"\u003e\u003ccode\u003e988a937\u003c/code\u003e\u003c/a\u003e fix: typing in \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/998\"\u003e#998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/78b8d8b94b26df14d0194b3d44a5db8a76f1fa47\"\u003e\u003ccode\u003e78b8d8b\u003c/code\u003e\u003c/a\u003e feat: add \u003ccode\u003econtrib.bom.utils.BomDependencyGraphFlatMerger\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/997\"\u003e#997\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/9beaf5c6b35a8739727572c0e351063849d876fc\"\u003e\u003ccode\u003e9beaf5c\u003c/code\u003e\u003c/a\u003e docs: improve docs of \u003ccode\u003econtrib.bom.utils.BomRefDiscriminator\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/996\"\u003e#996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/3bb87aabbc421aabac307305217c7975e63b43eb\"\u003e\u003ccode\u003e3bb87aa\u003c/code\u003e\u003c/a\u003e feat: move \u003ccode\u003eoutput.BomRefDiscriminator\u003c/code\u003e to `contrib.bom.utils.BomRefDiscrimin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/150777e13421c2838b27ff926653e24094d3f75d\"\u003e\u003ccode\u003e150777e\u003c/code\u003e\u003c/a\u003e chore(release): 11.9.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/b50238102553dc215b08796ea914072294f69489\"\u003e\u003ccode\u003eb502381\u003c/code\u003e\u003c/a\u003e feat: add support for license expression details (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/908\"\u003e#908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/commit/2ce770fb1b337a97e3a0eb340f539ebc85902e17\"\u003e\u003ccode\u003e2ce770f\u003c/code\u003e\u003c/a\u003e chore(deps): update m2r2 requirement from \u0026gt;=0.3.2 to \u0026gt;=0.3.4 (\u003ca href=\"https://redirect.github.com/CycloneDX/cyclonedx-python-lib/issues/970\"\u003e#970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/CycloneDX/cyclonedx-python-lib/compare/v11.7.0...v11.10.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.29.0 to 3.29.4\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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e by \u003ca href=\"https://github.com/MrAnno\"\u003e\u003ccode\u003e@​MrAnno\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/540\"\u003etox-dev/filelock#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration by \u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/543\"\u003etox-dev/filelock#543\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/542\"\u003etox-dev/filelock#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/544\"\u003etox-dev/filelock#544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/545\"\u003etox-dev/filelock#545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the 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/548\"\u003etox-dev/filelock#548\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/MrAnno\"\u003e\u003ccode\u003e@​MrAnno\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/540\"\u003etox-dev/filelock#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/543\"\u003etox-dev/filelock#543\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/542\"\u003etox-dev/filelock#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/548\"\u003etox-dev/filelock#548\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.4 (2026-06-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ekeep the read/write heartbeat alive on a transient touch error :pr:\u003ccode\u003e562\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003everify inode in break_lock_file before unlinking a stale lock :pr:\u003ccode\u003e561\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\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/tox-dev/filelock/commit/f3c11c0b757205631fe121720c75f4c84ecabc09\"\u003e\u003ccode\u003ef3c11c0\u003c/code\u003e\u003c/a\u003e Release 3.29.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/5d663ee178d6affb86d3bb96486d5370bf86cb08\"\u003e\u003ccode\u003e5d663ee\u003c/code\u003e\u003c/a\u003e keep the read/write heartbeat alive on a transient touch error (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/406d0a25b01c2a371c018a1c3006397c49360c22\"\u003e\u003ccode\u003e406d0a2\u003c/code\u003e\u003c/a\u003e verify inode in break_lock_file before unlinking a stale lock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/85e73d7f0575e30a3d94a00452255e381c7b8eb3\"\u003e\u003ccode\u003e85e73d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): publish from release.yaml on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f86dcb1abca36bb02b65232d411d7e8dce8569e6\"\u003e\u003ccode\u003ef86dcb1\u003c/code\u003e\u003c/a\u003e Release 3.29.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/643bdbe89bff3c61e29d14d7657d045bb89ade6d\"\u003e\u003ccode\u003e643bdbe\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): restore release environment on tag job (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/559\"\u003e#559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7a8f74a904cf7d98b6baf24eb37175d128a5f818\"\u003e\u003ccode\u003e7a8f74a\u003c/code\u003e\u003c/a\u003e validate pid range in _parse_lock_holder (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/556\"\u003e#556\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d1d49a0b232a6d904ff29b22213834df75ffc59b\"\u003e\u003ccode\u003ed1d49a0\u003c/code\u003e\u003c/a\u003e 🔧 ci(release): publish to PyPI on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b37e162e316ec0ef6e5b8c37a1c04bdaaa411487\"\u003e\u003ccode\u003eb37e162\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/558\"\u003e#558\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d9216dea26f31d369c7d3422bfe14c08b51232f1\"\u003e\u003ccode\u003ed9216de\u003c/code\u003e\u003c/a\u003e Release 3.29.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.0...3.29.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `msgpack` from 1.1.2 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/msgpack/msgpack-python/releases\"\u003emsgpack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003erelax setuptools version by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/652\"\u003emsgpack/msgpack-python#652\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate setuptools requirements to \u0026gt;=78.1.1 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/653\"\u003emsgpack/msgpack-python#653\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ecython: freethreading_compatible by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/654\"\u003emsgpack/msgpack-python#654\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edrop Python 3.9 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/656\"\u003emsgpack/msgpack-python#656\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate cython and cibuildwheel by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/658\"\u003emsgpack/msgpack-python#658\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: add riscv64 manylinux/musllinux wheels by \u003ca href=\"https://github.com/justeph\"\u003e\u003ccode\u003e@​justeph\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/664\"\u003emsgpack/msgpack-python#664\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check \u003ccode\u003eunpack_callback_uint32\u003c/code\u003e result by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/666\"\u003emsgpack/msgpack-python#666\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: re-raise existing exception when available by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/667\"\u003emsgpack/msgpack-python#667\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: check return code in \u003ccode\u003eunpack_callback_int64\u003c/code\u003e by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/665\"\u003emsgpack/msgpack-python#665\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed README example by \u003ca href=\"https://github.com/vallsv\"\u003e\u003ccode\u003e@​vallsv\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/668\"\u003emsgpack/msgpack-python#668\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group with 6 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/msgpack/msgpack-python/pull/669\"\u003emsgpack/msgpack-python#669\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: use ubuntu-slim for lint by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/670\"\u003emsgpack/msgpack-python#670\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: enforce \u003ccode\u003estrict_map_key\u003c/code\u003e with \u003ccode\u003eobject_pairs_hook\u003c/code\u003e by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/673\"\u003emsgpack/msgpack-python#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRaise DEFAULT_RECURSE_LIMIT from 511 to 1024 by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/676\"\u003emsgpack/msgpack-python#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: properly handle return codes in \u003ccode\u003epack_timestamp\u003c/code\u003e by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/672\"\u003emsgpack/msgpack-python#672\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: avoid memory leak when decoding invalid nested arrays by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/671\"\u003emsgpack/msgpack-python#671\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd missing autoreset in Packer.pack_ext_type by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/663\"\u003emsgpack/msgpack-python#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd no-GIL interpreter support by \u003ca href=\"https://github.com/clin1234\"\u003e\u003ccode\u003e@​clin1234\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/641\"\u003emsgpack/msgpack-python#641\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eskip recursion limit test on free-threaded CPython builds by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/679\"\u003emsgpack/msgpack-python#679\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Timestamp.from_datetime returning wrong value for pre-epoch datetimes by \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/662\"\u003emsgpack/msgpack-python#662\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd 3.15 to CI by \u003ca href=\"https://github.com/clin1234\"\u003e\u003ccode\u003e@​clin1234\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/678\"\u003emsgpack/msgpack-python#678\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use-after-free in \u003ccode\u003eget_data_from_buffer\u003c/code\u003e by \u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/677\"\u003emsgpack/msgpack-python#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echange changelog format to markdown by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/680\"\u003emsgpack/msgpack-python#680\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies 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/msgpack/msgpack-python/pull/684\"\u003emsgpack/msgpack-python#684\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump sys.setrecursionlimit within test_nest_limit_1024 by \u003ca href=\"https://github.com/clin1234\"\u003e\u003ccode\u003e@​clin1234\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/682\"\u003emsgpack/msgpack-python#682\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGuard \u003ccode\u003ePacker\u003c/code\u003e buffer protocol hooks with Cython critical sections by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/686\"\u003emsgpack/msgpack-python#686\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHarden \u003ccode\u003eUnpacker.__init__\u003c/code\u003e re-entry cleanup to prevent buffer/context leaks by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/687\"\u003emsgpack/msgpack-python#687\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.0rc1 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/681\"\u003emsgpack/msgpack-python#681\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWheels CI hangs for MacOS Intel by \u003ca href=\"https://github.com/crusaderky\"\u003e\u003ccode\u003e@​crusaderky\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/689\"\u003emsgpack/msgpack-python#689\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pypa/cibuildwheel from 3.4.1 to 4.0.0 in the all-dependencies 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/msgpack/msgpack-python/pull/691\"\u003emsgpack/msgpack-python#691\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease v1.2.0 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/692\"\u003emsgpack/msgpack-python#692\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/justeph\"\u003e\u003ccode\u003e@​justeph\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/664\"\u003emsgpack/msgpack-python#664\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/KowalskiThomas\"\u003e\u003ccode\u003e@​KowalskiThomas\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/666\"\u003emsgpack/msgpack-python#666\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vallsv\"\u003e\u003ccode\u003e@​vallsv\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/668\"\u003emsgpack/msgpack-python#668\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/669\"\u003emsgpack/msgpack-python#669\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/676\"\u003emsgpack/msgpack-python#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/663\"\u003emsgpack/msgpack-python#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/clin1234\"\u003e\u003ccode\u003e@​clin1234\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/641\"\u003emsgpack/msgpack-python#641\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/crusaderky\"\u003e\u003ccode\u003e@​crusaderky\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/689\"\u003emsgpack/msgpack-python#689\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/msgpack/msgpack-python/compare/v1.1.2...v1.2.0\"\u003ehttps://github.com/msgpack/msgpack-python/compare/v1.1.2...v1.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.2.0rc1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003erelax setuptools version by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/652\"\u003emsgpack/msgpack-python#652\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate setuptools requirements to \u0026gt;=78.1.1 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/pull/653\"\u003emsgpack/msgpack-python#653\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/msgpack/msgpack-python/blob/main/CHANGELOG.md\"\u003emsgpack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.2.0\u003c/h1\u003e\n\u003cp\u003eRelease Date: 2026-06-11\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport free threaded Python. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/654\"\u003e#654\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/686\"\u003e#686\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/656\"\u003e#656\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix missing error checks in C code. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/665\"\u003e#665\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/666\"\u003e#666\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/667\"\u003e#667\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/672\"\u003e#672\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003estrict_map_key\u003c/code\u003e option didn't work for \u003ccode\u003eobject_pairs_hook\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/673\"\u003e#673\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIncrease DEFAULT_RECURSE_LIMIT of Unpacker to 1024. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/676\"\u003e#676\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix memory leak when Unpacker returns error for invalid input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/671\"\u003e#671\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ePacker.pack_ext_type()\u003c/code\u003e ignored \u003ccode\u003eautoreset\u003c/code\u003e option. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/663\"\u003e#663\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eTimestamp.from_datetime()\u003c/code\u003e returning wrong value for pre-epoch datetimes. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/662\"\u003e#662\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix use-after-free in \u003ccode\u003eunpackb()\u003c/code\u003e and \u003ccode\u003eUnpacker.unpack()\u003c/code\u003e for non-contiguous input. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/677\"\u003e#677\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix possible memory leak when calling \u003ccode\u003eUnpacker.__init__()\u003c/code\u003e several times. \u003ca href=\"https://redirect.github.com/msgpack/msgpack-python/issues/687\"\u003e#687\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/msg...\n\n_Description has been truncated_","html_url":"https://github.com/IvanAnishchuk/pyscv/pull/38","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/IvanAnishchuk%2Fpyscv/issues/38","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/38/packages"}},{"old_version":"3.20.3","new_version":"3.29.4","update_type":"minor","path":null,"pr_created_at":"2026-06-15T05:23:22.000Z","version_change":"3.20.3 → 3.29.4","issue":{"uuid":"4662294832","node_id":"PR_kwDOSuPaC87mZCZD","number":6,"state":"open","title":"build(deps): Bump the production group across 1 directory with 51 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-15T05:23:22.000Z","updated_at":"2026-06-15T05:23:53.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"production","update_count":51,"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.5.20","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.4.1","repository_url":"https://github.com/pallets/click"},{"name":"cryptography","old_version":"46.0.7","new_version":"49.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.137.0","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.1","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"httptools","old_version":"0.6.4","new_version":"0.8.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.10","new_version":"3.18","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.12.5","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-core","old_version":"2.41.5","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.0","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-asyncio","old_version":"0.15.1","new_version":"1.4.0","repository_url":"https://github.com/pytest-dev/pytest-asyncio"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.32","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.34.2","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.20.1"},{"name":"sqlalchemy","old_version":"2.0.40","new_version":"2.0.50","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.3.1","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.26.7","repository_url":"https://github.com/fastapi/typer"},{"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.49.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.2.0","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.4","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.30.0","new_version":"2026.5.1","repository_url":"https://github.com/crate-py/rpds"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production group with 51 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.5.20` |\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.4.1` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.7` | `49.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.137.0` |\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.1` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.6.4` | `0.8.0` |\n| [idna](https://github.com/kjd/idna) | `3.10` | `3.18` |\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.12.5` | `2.13.4` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.41.5` | `2.47.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.0` |\n| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `0.15.1` | `1.4.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.32` |\n| [pyyaml](https://github.com/yaml/pyyaml) | `6.0.2` | `6.0.3` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\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.20.1` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.40` | `2.0.50` |\n| [sqlmodel](https://github.com/fastapi/sqlmodel) | `0.0.22` | `0.0.38` |\n| [starlette](https://github.com/Kludex/starlette) | `0.49.1` | `1.3.1` |\n| [tomli](https://github.com/hukkin/tomli) | `2.0.1` | `2.4.1` |\n| [typer](https://github.com/fastapi/typer) | `0.15.2` | `0.26.7` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.30.6` | `0.49.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.2.0` |\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.4` |\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.30.0` | `2026.5.1` |\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.5.20\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\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\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2025.01.31...2026.05.20\"\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.4.1\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.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?closed=1\"\u003ehttps://github.com/pallets/click/milestone/32?closed=1\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 \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.\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.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\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,\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\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/6eeb50e948ea136db145280f6f5dd52eca3fa7e5\"\u003e\u003ccode\u003e6eeb50e\u003c/code\u003e\u003c/a\u003e release version 8.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/67921d5b71584112eebcbf89596b5f0e6d14c49f\"\u003e\u003ccode\u003e67921d5\u003c/code\u003e\u003c/a\u003e change log and doc fixes (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3495\"\u003e#3495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/9c41f46a4015700489ad009266edf1f3893d01d1\"\u003e\u003ccode\u003e9c41f46\u003c/code\u003e\u003c/a\u003e Fix changelog and version admonitions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/6cb34774f20598aa288332f8da02c5aee85448a6\"\u003e\u003ccode\u003e6cb3477\u003c/code\u003e\u003c/a\u003e fix skip condition\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/5ee8e3123d8ddece6c47eff9a7a7d4ca478c4f37\"\u003e\u003ccode\u003e5ee8e31\u003c/code\u003e\u003c/a\u003e fix I/O operation on closed file error with CliRunner and echo_via_pager (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/becbde5cf416441627f779e8dd34e57738ee1c1f\"\u003e\u003ccode\u003ebecbde5\u003c/code\u003e\u003c/a\u003e pager doesn't close std streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/a5f5aa6d4012d256ccca24638f2642fc371e9f77\"\u003e\u003ccode\u003ea5f5aa6\u003c/code\u003e\u003c/a\u003e Handle empty bytes in echo (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3493\"\u003e#3493\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/4d3db84b251518e97299a38a5ca4bab3d01873a2\"\u003e\u003ccode\u003e4d3db84\u003c/code\u003e\u003c/a\u003e handle empty bytes in echo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d42f15b71757de791a5781fb179fd972da9169f5\"\u003e\u003ccode\u003ed42f15b\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eget_parameter_source()\u003c/code\u003e during type conversion and eager callbacks (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/0baa8db07736fc7ad3d3eed97d4c73b0059c63e1\"\u003e\u003ccode\u003e0baa8db\u003c/code\u003e\u003c/a\u003e Document ctx.params bypass with test and doc\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.1.8...8.4.1\"\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 49.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\u003e49.0.0 - 2026-06-12\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **BACKWARDS INCOMPATIBLE:** Support for ``x86_64`` macOS has been removed.\n  We now only publish ``arm64`` wheels for macOS.\n* **BACKWARDS INCOMPATIBLE:** Support for 32-bit Windows has been removed.\n  Users should move to a 64-bit Python installation.\n* **BACKWARDS INCOMPATIBLE:** Removed the deprecated\n  ``PUBLIC_KEY_TYPES``, ``PRIVATE_KEY_TYPES``,\n  ``CERTIFICATE_PRIVATE_KEY_TYPES``, ``CERTIFICATE_ISSUER_PUBLIC_KEY_TYPES``,\n  and ``CERTIFICATE_PUBLIC_KEY_TYPES`` type aliases. Use\n  ``PublicKeyTypes``, ``PrivateKeyTypes``, ``CertificateIssuerPrivateKeyTypes``,\n  ``CertificateIssuerPublicKeyTypes``, and ``CertificatePublicKeyTypes``\n  instead. These were deprecated in version 40.0.\n* **BACKWARDS INCOMPATIBLE:** :class:`~cryptography.hazmat.primitives.ciphers.algorithms.ChaCha20`\n  now treats the first 4 bytes of the ``nonce`` as a 32-bit little-endian block\n  counter (as defined in :rfc:`7539`) and tracks the number of bytes processed.\n  Attempting to encrypt or decrypt more data than the counter allows before it\n  would overflow now raises a :class:`ValueError` rather than silently diverging\n  from RFC 7539. Setting the counter portion of the ``nonce`` to zero allows\n  encrypting up to 256 GiB with a given nonce.\n* **BACKWARDS INCOMPATIBLE:** Loading an X.509 certificate whose ECDSA or DSA\n  signature ``AlgorithmIdentifier`` contains encoded NULL parameters now raises\n  a :class:`ValueError`. Such certificates are invalid, but older versions of\n  Java emitted them; previously they loaded with a deprecation warning.\n* Fixed cross-compilation of the CFFI bindings when ``PYO3_CROSS_LIB_DIR``\n  is set. The build now derives the Python include directory from\n  ``PYO3_CROSS_LIB_DIR`` instead of querying the host interpreter, which\n  previously caused the build to fail during cross-compilations for embedded\n  systems, on hosts which have same-version Python development headers\n  installed as the target Python.\n* Added support for signing and verifying X.509 certificates, certificate\n  signing requests, and certificate revocation lists with\n  :doc:`/hazmat/primitives/asymmetric/mldsa` keys, as well as loading\n  certificates that contain ML-DSA public keys.\n* Added :meth:`~cryptography.hazmat.primitives.hpke.KEM.enc_length` to\n  :class:`~cryptography.hazmat.primitives.hpke.KEM` so callers can split the\n  encapsulated key from the ciphertext returned by\n  :meth:`~cryptography.hazmat.primitives.hpke.Suite.encrypt`.\n* :meth:`~cryptography.x509.verification.ExtensionPolicy.require_present`,\n  :meth:`~cryptography.x509.verification.ExtensionPolicy.may_be_present`, and\n  :meth:`~cryptography.x509.verification.ExtensionPolicy.require_not_present`\n  now accept any extension type. Previously only a fixed set of extension\n  types was supported, which made it impossible to account for otherwise\n  unrecognized critical extensions during path validation.\n* Added support for using :class:`~cryptography.x509.Certificate`,\n  :class:`~cryptography.x509.CertificateSigningRequest`, and\n  :class:`~cryptography.x509.CertificateRevocationList` as field types in\n  :doc:`/hazmat/asn1/index` structures.\n* Added :func:`~cryptography.hazmat.asn1.value_set`, a class decorator that\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt; \n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/e300bbe2f1bec75e5ee7e0ab7b196958831b3db6\"\u003e\u003ccode\u003ee300bbe\u003c/code\u003e\u003c/a\u003e bump version and changelog for 49.0.0 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15030\"\u003e#15030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/fa74cd8031b263edb50307f6d5a9a70df9f0a541\"\u003e\u003ccode\u003efa74cd8\u003c/code\u003e\u003c/a\u003e Add external mu (message representative) support for ML-DSA (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14979\"\u003e#14979\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/f594db3f315e621473c58721961f502ba2a286ec\"\u003e\u003ccode\u003ef594db3\u003c/code\u003e\u003c/a\u003e chore(deps): bump openssl from 0.10.80 to 0.10.81 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15029\"\u003e#15029\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/608e0119532153336310e51747724c6b9d107df7\"\u003e\u003ccode\u003e608e011\u003c/code\u003e\u003c/a\u003e chore(deps): bump openssl-sys from 0.9.116 to 0.9.117 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15028\"\u003e#15028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/a322bc4fb2bd2fd6f345fdb155cac226b1770dad\"\u003e\u003ccode\u003ea322bc4\u003c/code\u003e\u003c/a\u003e chore(deps): bump cc from 1.2.63 to 1.2.64 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15027\"\u003e#15027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/33181a74d41aa859b05f3720700a31c8e5b9e54c\"\u003e\u003ccode\u003e33181a7\u003c/code\u003e\u003c/a\u003e Reject critical nameConstraints extensions containing directoryName constrain...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/6080dc7f08e7473544b07df95833ff2ee843266e\"\u003e\u003ccode\u003e6080dc7\u003c/code\u003e\u003c/a\u003e Bump dependencies that dependabot isn't (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15026\"\u003e#15026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/121faa33a717559a8b0f0180b2d4e7785234af79\"\u003e\u003ccode\u003e121faa3\u003c/code\u003e\u003c/a\u003e chore(deps): bump virtualenv from 21.4.2 to 21.4.3 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15023\"\u003e#15023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/829520baa909eff95d64e5ebd165544d6fd60172\"\u003e\u003ccode\u003e829520b\u003c/code\u003e\u003c/a\u003e Add more robust processing for DH parameters. (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15016\"\u003e#15016\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/0f0500141cec535846f36c4c68d02b03126386b5\"\u003e\u003ccode\u003e0f05001\u003c/code\u003e\u003c/a\u003e Bump downstream dependencies in CI (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/15025\"\u003e#15025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.7...49.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/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eAttributeError: 'TracebackException' object has no attribute 'exceptions'\u003c/code\u003e when formatting unpickled TBEs from another Python process which did not apply the \u003ccode\u003eexceptiongroup\u003c/code\u003e patches (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/144\"\u003e#144\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003e**kwargs\u003c/code\u003e to function and method signatures as appropriate to match the signatures in the standard library\u003c/li\u003e\n\u003cli\u003eIn line with the stdlib typings in typeshed, updated \u003ccode\u003e(Base)ExceptionGroup\u003c/code\u003e generic types to define defaults for their generic arguments (defaulting to \u003ccode\u003eBaseExceptionGroup[BaseException]\u003c/code\u003e and \u003ccode\u003eExceptionGroup[Exception]\u003c/code\u003e) (PR by \u003ca href=\"https://github.com/mikenerone\"\u003e\u003ccode\u003e@​mikenerone\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eBaseExceptionGroup.__init__()\u003c/code\u003e to directly call \u003ccode\u003eBaseException.__init__()\u003c/code\u003e instead of the superclass \u003ccode\u003e__init__()\u003c/code\u003e in order to emulate the CPython behavior (broken or not) (PR by \u003ca href=\"https://github.com/cfbolz\"\u003e\u003ccode\u003e@​cfbolz\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged the \u003ccode\u003eexceptions\u003c/code\u003e attribute to always return the same tuple of exceptions, created from the original exceptions sequence passed to \u003ccode\u003eBaseExceptionGroup\u003c/code\u003e to match CPython behavior (\u003ca href=\"https://redirect.github.com/agronholm/exceptiongroup/issues/143\"\u003e#143\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/agronholm/exceptiongroup/blob/main/CHANGES.rst\"\u003eexceptiongroup's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eVersion history\u003c/h1\u003e\n\u003cp\u003eThis library adheres to \u003ccode\u003eSemantic Versioning 2.0 \u0026lt;http://semver.org/\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eUNRELEASED\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed the \u003ccode\u003erepr()\u003c/code\u003e of exception groups being affected by mutation of the\noriginal exception sequence after construction\n(\u003ccode\u003e[#154](https://github.com/agronholm/exceptiongroup/issues/154) \u0026lt;https://github.com/agronholm/exceptiongroup/issues/154\u0026gt;\u003c/code\u003e_)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e1.3.1\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eAttributeError: 'TracebackException' object has no attribute 'exceptions'\u003c/code\u003e\nwhen formatting unpickled TBEs from another Python process which did not apply the\n\u003ccode\u003eexceptiongroup\u003c/code\u003e patches\n(\u003ccode\u003e[#144](https://github.com/agronholm/exceptiongroup/issues/144) \u0026lt;htt...\n\n_Description has been truncated_","html_url":"https://github.com/KarthikShivasankar/reed-manufacturing-data-space/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarthikShivasankar%2Freed-manufacturing-data-space/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"3.29.0","new_version":"3.29.3","update_type":"patch","path":null,"pr_created_at":"2026-06-13T12:14:36.000Z","version_change":"3.29.0 → 3.29.3","issue":{"uuid":"4655459629","node_id":"PR_kwDOQe0E4M7mEPjM","number":479,"state":"open","title":"chore(deps): bump filelock from 3.29.0 to 3.29.3","user":"dependabot[bot]","labels":[],"assignees":["yasha-dev1"],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-13T12:14:36.000Z","updated_at":"2026-06-13T12:14:37.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"filelock","old_version":"3.29.0","new_version":"3.29.3","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.29.0 to 3.29.3.\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.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\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.1...3.29.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.29.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e by \u003ca href=\"https://github.com/MrAnno\"\u003e\u003ccode\u003e@​MrAnno\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/540\"\u003etox-dev/filelock#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration by \u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/543\"\u003etox-dev/filelock#543\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/542\"\u003etox-dev/filelock#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/544\"\u003etox-dev/filelock#544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path by \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/545\"\u003etox-dev/filelock#545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the 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/548\"\u003etox-dev/filelock#548\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/MrAnno\"\u003e\u003ccode\u003e@​MrAnno\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/540\"\u003etox-dev/filelock#540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Gares95\"\u003e\u003ccode\u003e@​Gares95\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/543\"\u003etox-dev/filelock#543\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/542\"\u003etox-dev/filelock#542\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/dxbjavid\"\u003e\u003ccode\u003e@​dxbjavid\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/548\"\u003etox-dev/filelock#548\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.0...3.29.1\"\u003ehttps://github.com/tox-dev/filelock/compare/3.29.0...3.29.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.0 (2026-04-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows :pr:\u003ccode\u003e534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency :pr:\u003ccode\u003e533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 :pr:\u003ccode\u003e530\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\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/tox-dev/filelock/commit/85e73d7f0575e30a3d94a00452255e381c7b8eb3\"\u003e\u003ccode\u003e85e73d7\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): publish from release.yaml on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/560\"\u003e#560\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f86dcb1abca36bb02b65232d411d7e8dce8569e6\"\u003e\u003ccode\u003ef86dcb1\u003c/code\u003e\u003c/a\u003e Release 3.29.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/643bdbe89bff3c61e29d14d7657d045bb89ade6d\"\u003e\u003ccode\u003e643bdbe\u003c/code\u003e\u003c/a\u003e 🐛 fix(ci): restore release environment on tag job (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/559\"\u003e#559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/7a8f74a904cf7d98b6baf24eb37175d128a5f818\"\u003e\u003ccode\u003e7a8f74a\u003c/code\u003e\u003c/a\u003e validate pid range in _parse_lock_holder (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/556\"\u003e#556\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d1d49a0b232a6d904ff29b22213834df75ffc59b\"\u003e\u003ccode\u003ed1d49a0\u003c/code\u003e\u003c/a\u003e 🔧 ci(release): publish to PyPI on tag push (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/557\"\u003e#557\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b37e162e316ec0ef6e5b8c37a1c04bdaaa411487\"\u003e\u003ccode\u003eb37e162\u003c/code\u003e\u003c/a\u003e build(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/558\"\u003e#558\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/d9216dea26f31d369c7d3422bfe14c08b51232f1\"\u003e\u003ccode\u003ed9216de\u003c/code\u003e\u003c/a\u003e Release 3.29.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/ab6844ddde56e0a93d34d918f90eef6fc74d2c6a\"\u003e\u003ccode\u003eab6844d\u003c/code\u003e\u003c/a\u003e build(deps): bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/555\"\u003e#555\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/b862ead7201e8a602311bbc29e444db343b07967\"\u003e\u003ccode\u003eb862ead\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/554\"\u003e#554\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/2ff7c3cffc5d872a890783890fd6fd3b9fd27643\"\u003e\u003ccode\u003e2ff7c3c\u003c/code\u003e\u003c/a\u003e check hostname in is_lock_held_by_us (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/553\"\u003e#553\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.29.0...3.29.3\"\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=filelock\u0026package-manager=pip\u0026previous-version=3.29.0\u0026new-version=3.29.3)](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/QualityUnit/pyworkflow/pull/479","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/QualityUnit%2Fpyworkflow/issues/479","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/479/packages"}},{"old_version":"3.20.2","new_version":"3.20.3","update_type":"patch","path":null,"pr_created_at":"2026-06-11T04:40:58.000Z","version_change":"3.20.2 → 3.20.3","issue":{"uuid":"4637274648","node_id":"PR_kwDOOTECAM7lJ9Zs","number":6,"state":"open","title":"chore(deps): bump filelock from 3.20.2 to 3.20.3","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-06-11T04:40:58.000Z","updated_at":"2026-06-11T04:52:05.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"filelock","old_version":"3.20.2","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"}],"path":null,"ecosystem":"pip"},"body":"Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.20.2 to 3.20.3.\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.0 (2026-04-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows :pr:\u003ccode\u003e534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency :pr:\u003ccode\u003e533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 :pr:\u003ccode\u003e530\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\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/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.20.2...3.20.3\"\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=filelock\u0026package-manager=uv\u0026previous-version=3.20.2\u0026new-version=3.20.3)](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)\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/qsoyq/stash/network/alerts).\n\n\u003c/details\u003e","html_url":"https://github.com/qsoyq/stash/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/qsoyq%2Fstash/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"3.20.1","new_version":"3.20.3","update_type":"patch","path":null,"pr_created_at":"2026-06-11T01:29:05.000Z","version_change":"3.20.1 → 3.20.3","issue":{"uuid":"4636387573","node_id":"PR_kwDORtR3rs7lHOUF","number":5,"state":"open","title":"chore(deps): bump the uv group across 1 directory with 19 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-06-11T01:29:05.000Z","updated_at":"2026-06-11T01:30:14.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv","update_count":19,"packages":[{"name":"flask","old_version":"3.1.2","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"python-dotenv","old_version":"1.2.1","new_version":"1.2.2","repository_url":"https://github.com/theskumar/python-dotenv"},{"name":"cryptography","old_version":"46.0.3","new_version":"46.0.7","repository_url":"https://github.com/pyca/cryptography"},{"name":"filelock","old_version":"3.20.1","new_version":"3.20.3","repository_url":"https://github.com/tox-dev/py-filelock"},{"name":"idna","old_version":"3.11","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"lxml","old_version":"6.0.2","new_version":"6.1.0","repository_url":"https://github.com/lxml/lxml"},{"name":"marshmallow","old_version":"3.26.1","new_version":"3.26.2","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"mistune","old_version":"3.1.4","new_version":"3.2.1","repository_url":"https://github.com/lepture/mistune"},{"name":"nbconvert","old_version":"7.16.6","new_version":"7.17.1","repository_url":"https://github.com/jupyter/nbconvert"},{"name":"nltk","old_version":"3.9.2","new_version":"3.9.4","repository_url":"https://github.com/nltk/nltk"},{"name":"pypdf","old_version":"6.4.2","new_version":"6.10.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"python-multipart","old_version":"0.0.21","new_version":"0.0.27","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"requests","old_version":"2.32.5","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"starlette","old_version":"0.50.0","new_version":"1.0.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"torch","old_version":"2.9.1","new_version":"2.10.0","repository_url":"https://github.com/pytorch/pytorch"},{"name":"tornado","old_version":"6.5.4","new_version":"6.5.5","repository_url":"https://github.com/tornadoweb/tornado"},{"name":"urllib3","old_version":"2.6.2","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"virtualenv","old_version":"20.35.4","new_version":"20.36.1","repository_url":"https://github.com/pypa/virtualenv"},{"name":"werkzeug","old_version":"3.1.4","new_version":"3.1.6","repository_url":"https://github.com/pallets/werkzeug"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 19 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.2` | `3.1.3` |\n| [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` |\n| [cryptography](https://github.com/pyca/cryptography) | `46.0.3` | `46.0.7` |\n| [filelock](https://github.com/tox-dev/py-filelock) | `3.20.1` | `3.20.3` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.15` |\n| [lxml](https://github.com/lxml/lxml) | `6.0.2` | `6.1.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.1` | `3.26.2` |\n| [mistune](https://github.com/lepture/mistune) | `3.1.4` | `3.2.1` |\n| [nbconvert](https://github.com/jupyter/nbconvert) | `7.16.6` | `7.17.1` |\n| [nltk](https://github.com/nltk/nltk) | `3.9.2` | `3.9.4` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.4.2` | `6.10.2` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.21` | `0.0.27` |\n| [requests](https://github.com/psf/requests) | `2.32.5` | `2.33.0` |\n| [starlette](https://github.com/Kludex/starlette) | `0.50.0` | `1.0.1` |\n| [torch](https://github.com/pytorch/pytorch) | `2.9.1` | `2.10.0` |\n| [tornado](https://github.com/tornadoweb/tornado) | `6.5.4` | `6.5.5` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.2` | `2.7.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `20.35.4` | `20.36.1` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.4` | `3.1.6` |\n\n\nUpdates `flask` from 3.1.2 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue 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/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\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/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\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/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.2...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-dotenv` from 1.2.1 to 1.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/theskumar/python-dotenv/releases\"\u003epython-dotenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.2\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (#)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/607\"\u003etheskumar/python-dotenv#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e#790c5\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by \u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMisc\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eskip 000 permission tests for root user by \u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/checkout from 5 to 6 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/theskumar/python-dotenv/pull/593\"\u003etheskumar/python-dotenv#593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Windows testing to CI by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/604\"\u003etheskumar/python-dotenv#604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove workflow efficiency with best practices by \u003ca href=\"https://github.com/theskumar\"\u003e\u003ccode\u003e@​theskumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/609\"\u003etheskumar/python-dotenv#609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the use of \u003ccode\u003esh\u003c/code\u003e in tests by \u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/612\"\u003etheskumar/python-dotenv#612\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/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/590\"\u003etheskumar/python-dotenv#590\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/burnout-projects\"\u003e\u003ccode\u003e@​burnout-projects\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/561\"\u003etheskumar/python-dotenv#561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/cpackham-atlnz\"\u003e\u003ccode\u003e@​cpackham-atlnz\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/pull/597\"\u003etheskumar/python-dotenv#597\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\u003ehttps://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.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/theskumar/python-dotenv/blob/main/CHANGELOG.md\"\u003epython-dotenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.2.2] - 2026-03-01\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14, including the free-threaded (3.14t) build. (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003edotenv run\u003c/code\u003e command now forwards flags directly to the specified command by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/607\"\u003e#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved documentation clarity regarding override behavior and the reference page.\u003c/li\u003e\n\u003cli\u003eUpdated PyPy support to version 3.11.\u003c/li\u003e\n\u003cli\u003eDocumentation for FIFO file support.\u003c/li\u003e\n\u003cli\u003eDropped Support for Python 3.9.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved \u003ccode\u003eset_key\u003c/code\u003e and \u003ccode\u003eunset_key\u003c/code\u003e behavior when interacting with symlinks by [\u003ca href=\"https://github.com/bbc2\"\u003e\u003ccode\u003e@​bbc2\u003c/code\u003e\u003c/a\u003e] in [790c5c0]\u003c/li\u003e\n\u003cli\u003eCorrected the license specifier and added missing Python 3.14 classifiers in package metadata by [\u003ca href=\"https://github.com/JYOuyang\"\u003e\u003ccode\u003e@​JYOuyang\u003c/code\u003e\u003c/a\u003e] in \u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/590\"\u003e#590\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBreaking Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e and \u003ccode\u003edotenv.unset_key\u003c/code\u003e used to follow symlinks in some\nsituations. This is no longer the case. For that behavior to be restored in\nall cases, \u003ccode\u003efollow_symlinks=True\u003c/code\u003e should be used.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the CLI, \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e used to follow symlinks in some situations. This\nis no longer the case.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003edotenv.set_key\u003c/code\u003e, \u003ccode\u003edotenv.unset_key\u003c/code\u003e and the CLI commands \u003ccode\u003eset\u003c/code\u003e and \u003ccode\u003eunset\u003c/code\u003e\nused to reset the file mode of the modified .env file to \u003ccode\u003e0o600\u003c/code\u003e in some\nsituations. This is no longer the case: The original mode of the file is now\npreserved. Is the file needed to be created or wasn't a regular file, mode\n\u003ccode\u003e0o600\u003c/code\u003e is used.\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/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d\"\u003e\u003ccode\u003e36004e0\u003c/code\u003e\u003c/a\u003e Bump version: 1.2.1 → 1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8\"\u003e\u003ccode\u003eeb20252\u003c/code\u003e\u003c/a\u003e docs: update changelog for v1.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311\"\u003e\u003ccode\u003e790c5c0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1\"\u003e\u003ccode\u003e43340da\u003c/code\u003e\u003c/a\u003e Remove the use of \u003ccode\u003esh\u003c/code\u003e in tests (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/612\"\u003e#612\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c\"\u003e\u003ccode\u003e09d7cee\u003c/code\u003e\u003c/a\u003e docs: clarify override behavior and document FIFO support (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/610\"\u003e#610\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c\"\u003e\u003ccode\u003ec8de288\u003c/code\u003e\u003c/a\u003e ci: improve workflow efficiency with best practices (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/609\"\u003e#609\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4\"\u003e\u003ccode\u003e7bd9e3d\u003c/code\u003e\u003c/a\u003e Add Windows testing to CI (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/604\"\u003e#604\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81\"\u003e\u003ccode\u003e1baaf04\u003c/code\u003e\u003c/a\u003e Drop Python 3.9 support and update to PyPy 3.11 (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/608\"\u003e#608\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc\"\u003e\u003ccode\u003e4a22cf8\u003c/code\u003e\u003c/a\u003e ci: enable testing on Python 3.14t (free-threaded) (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/588\"\u003e#588\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4\"\u003e\u003ccode\u003ee2e8e77\u003c/code\u003e\u003c/a\u003e Fix license specifier (\u003ca href=\"https://redirect.github.com/theskumar/python-dotenv/issues/597\"\u003e#597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2\"\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.3 to 46.0.7\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\u003e46.0.7 - 2026-04-07\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* **SECURITY ISSUE**: Fixed an issue where non-contiguous buffers could be\n  passed to APIs that accept Python buffers, which could lead to buffer\n  overflow. **CVE-2026-39892**\n* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.6.\n\u003cp\u003e.. _v46-0-6:\u003c/p\u003e\n\u003cp\u003e46.0.6 - 2026-03-25\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSECURITY ISSUE\u003c/strong\u003e: Fixed a bug where name constraints were not applied\nto peer names during verification when the leaf certificate contains a\nwildcard DNS SAN. Ordinary X.509 topologies are not affected by this bug,\nincluding those used by the Web PKI. Credit to \u003cstrong\u003eOleh Konko (1seal)\u003c/strong\u003e for\nreporting the issue. \u003cstrong\u003eCVE-2026-34073\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v46-0-5:\u003c/p\u003e\n\u003cp\u003e46.0.5 - 2026-02-10\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n* An attacker could create a malicious public key that reveals portions of your\n  private key when using certain uncommon elliptic curves (binary curves).\n  This version now includes additional security checks to prevent this attack.\n  This issue only affects binary elliptic curves, which are rarely used in\n  real-world applications. Credit to **XlabAI Team of Tencent Xuanwu Lab and\n  Atuin Automated Vulnerability Discovery Engine** for reporting the issue.\n  **CVE-2026-26007**\n* Support for ``SECT*`` binary elliptic curves is deprecated and will be\n  removed in the next release.\n\u003cp\u003e.. v46-0-4:\u003c/p\u003e\n\u003cp\u003e46.0.4 - 2026-01-27\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eDropped support for win_arm64 wheels\u003c/code\u003e_.\u003c/li\u003e\n\u003cli\u003eUpdated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.5.5.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _v46-0-3:\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/pyca/cryptography/commit/622d672e429a7cff836a23c5903683dbec1901f5\"\u003e\u003ccode\u003e622d672\u003c/code\u003e\u003c/a\u003e 46.0.7 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14602\"\u003e#14602\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/91d728897bdad30cd5c79a2b23e207f1f050d587\"\u003e\u003ccode\u003e91d7288\u003c/code\u003e\u003c/a\u003e Cherry-pick \u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14542\"\u003e#14542\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14543\"\u003e#14543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/06e120e682cb200e3f7050c02f0bcdac90c4c6ad\"\u003e\u003ccode\u003e06e120e\u003c/code\u003e\u003c/a\u003e bump version for 46.0.5 release (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14289\"\u003e#14289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/0eebb9dbb6343d9bc1d91e5a2482ed4e054a6d8c\"\u003e\u003ccode\u003e0eebb9d\u003c/code\u003e\u003c/a\u003e EC check key on cofactor \u0026gt; 1 (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14287\"\u003e#14287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/bedf6e186b814f69a3f54f51252c23a71d44ed2e\"\u003e\u003ccode\u003ebedf6e1\u003c/code\u003e\u003c/a\u003e fix openssl version on 46 branch (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14220\"\u003e#14220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pyca/cryptography/commit/e6f44fc8e6391f05d719fb9d369692325b87a471\"\u003e\u003ccode\u003ee6f44fc\u003c/code\u003e\u003c/a\u003e bump for 46.0.4 and drop win arm64 due to CI issues (\u003ca href=\"https://redirect.github.com/pyca/cryptography/issues/14217\"\u003e#14217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pyca/cryptography/compare/46.0.3...46.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `filelock` from 3.20.1 to 3.20.3\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.20.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix TOCTOU symlink vulnerability in SoftFileLock 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/465\"\u003etox-dev/filelock#465\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.20.2...3.20.3\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.2...3.20.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e3.20.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Unix systems without O_NOFOLLOW by \u003ca href=\"https://github.com/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/464\"\u003etox-dev/filelock#464\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/mwilliamson\"\u003e\u003ccode\u003e@​mwilliamson\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/filelock/pull/463\"\u003etox-dev/filelock#463\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.20.1...3.20.2\"\u003ehttps://github.com/tox-dev/filelock/compare/3.20.1...3.20.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/tox-dev/filelock/blob/main/docs/changelog.rst\"\u003efilelock's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e###########\nChangelog\n###########\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.3 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(ci): restore release environment on tag job :pr:\u003ccode\u003e559\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003evalidate pid range in _parse_lock_holder :pr:\u003ccode\u003e556\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔧 ci(release): publish to PyPI on tag push :pr:\u003ccode\u003e557\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.1.0 to 8.2.0 :pr:\u003ccode\u003e558\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.2 (2026-06-10)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003ebuild(deps): bump actions/checkout from 6.0.2 to 6.0.3 :pr:\u003ccode\u003e555\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e554\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echeck hostname in is_lock_held_by_us :pr:\u003ccode\u003e553\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🔒 fix(soft): harden stale-lock breaking and self-heal malformed locks :pr:\u003ccode\u003e551\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eopen marker reads non-blocking to refuse attacker-placed fifo :pr:\u003ccode\u003e549\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.1 (2026-06-03)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(soft): refuse to follow symlinks when reading the lock file :pr:\u003ccode\u003e548\u003c/code\u003e - by :user:\u003ccode\u003edxbjavid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e547\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e546\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e545\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e544\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003echore: improve filelock maintenance path :pr:\u003ccode\u003e542\u003c/code\u003e - by :user:\u003ccode\u003elphuc2250gma\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: clarify per-thread scope of FileLock configuration :pr:\u003ccode\u003e543\u003c/code\u003e - by :user:\u003ccode\u003eGares95\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e541\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003edocs: fix API docs of \u003ccode\u003erelease()\u003c/code\u003e :pr:\u003ccode\u003e540\u003c/code\u003e - by :user:\u003ccode\u003eMrAnno\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e539\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e538\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e537\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump astral-sh/setup-uv from 8.0.0 to 8.1.0 :pr:\u003ccode\u003e536\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate :pr:\u003ccode\u003e535\u003c/code\u003e - by :user:\u003ccode\u003epre-commit-ci[bot]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e3.29.0 (2026-04-19)\u003c/p\u003e\n\u003chr /\u003e\n\u003cul\u003e\n\u003cli\u003e✨ feat(soft): enable stale lock detection on Windows :pr:\u003ccode\u003e534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(async): use single-thread executor for lock consistency :pr:\u003ccode\u003e533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 :pr:\u003ccode\u003e530\u003c/code\u003e - by :user:\u003ccode\u003edependabot[bot]\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/tox-dev/filelock/commit/41b42dd2c72aecf7da83dbda5903b8087dddc4d5\"\u003e\u003ccode\u003e41b42dd\u003c/code\u003e\u003c/a\u003e Fix TOCTOU symlink vulnerability in SoftFileLock (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/f2e7d4046b6a2b375a573bcfbad21827b99f8939\"\u003e\u003ccode\u003ef2e7d40\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/filelock/commit/50888548eb2f008d372e71f2835a47851ab83836\"\u003e\u003ccode\u003e5088854\u003c/code\u003e\u003c/a\u003e Support Unix systems without O_NOFOLLOW (\u003ca href=\"https://redirect.github.com/tox-dev/py-filelock/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/py-filelock/compare/3.20.1...3.20.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.11 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\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/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.11...v3.15\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `lxml` from 6.0.2 to 6.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lxml/lxml/blob/master/CHANGES.txt\"\u003elxml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e6.1.0 (2026-04-17)\u003c/h1\u003e\n\u003cp\u003eThis release fixes a possible external entity injection (XXE) vulnerability in\n\u003ccode\u003eiterparse()\u003c/code\u003e and the \u003ccode\u003eETCompatXMLParser\u003c/code\u003e.\u003c/p\u003e\n\u003ch2\u003eFeatures added\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eGH#486: The HTML ARIA accessibility attributes were added to the set of safe attributes\nin \u003ccode\u003elxml.html.defs\u003c/code\u003e.  This allows \u003ccode\u003elxml_html_clean\u003c/code\u003e to pass them through.\nPatch by oomsveta.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe default chunk size for reading from file-likes in \u003ccode\u003eiterparse()\u003c/code\u003e is now configurable\nwith a new \u003ccode\u003echunk_size\u003c/code\u003e argument.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLP#2146291: The \u003ccode\u003eresolve_entities\u003c/code\u003e option was still set to \u003ccode\u003eTrue\u003c/code\u003e for\n\u003ccode\u003eiterparse\u003c/code\u003e and \u003ccode\u003eETCompatXMLParser\u003c/code\u003e, allowing for external entity injection (XXE)\nwhen using these parsers without setting this option explicitly.\nThe default was now changed to \u003ccode\u003e'internal'\u003c/code\u003e only (as for the normal XML and HTML parsers\nsince lxml 5.0).\nIssue found by Sihao Qiu as CVE-2026-41066.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.0.4 (2026-04-12)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eLP#2148019: Spurious MemoryError during namespace cleanup.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e6.0.3 (2026-04-09)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eSeveral out of memory error cases now raise \u003ccode\u003eMemoryError\u003c/code\u003e that were not handled before.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSlicing with large step values (outside of \u003ccode\u003e+/- sys.maxsize\u003c/code\u003e) could trigger undefined C behaviour.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2125399: Some failing tests were fixed or disabled in PyPy.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLP#2138421: Memory leak in error cases when setting the \u003ccode\u003epublic_id\u003c/code\u003e or \u003ccode\u003esystem_url\u003c/code\u003e of a document.\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/lxml/lxml/commit/43722f4402afa48b7890a96ce012eb0b9b1af5be\"\u003e\u003ccode\u003e43722f4\u003c/code\u003e\u003c/a\u003e Update changelog.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/87470409b17188a5a7dbefcfa124af9cd792ffaa\"\u003e\u003ccode\u003e8747040\u003c/code\u003e\u003c/a\u003e Name version of option change in docstring.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/6c36e6cef77db5087a1fff1a0d1ca8fed963afe7\"\u003e\u003ccode\u003e6c36e6c\u003c/code\u003e\u003c/a\u003e Fix pypistats URL in download statistics script.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/c7d76d6cb817c8e1f316e43b16cab5e6ad669ad0\"\u003e\u003ccode\u003ec7d76d6\u003c/code\u003e\u003c/a\u003e Change security policy to point to Github security advisories.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/378ccf82db8160928807c55ed580c0443aa94f42\"\u003e\u003ccode\u003e378ccf8\u003c/code\u003e\u003c/a\u003e Update project income report.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/315270b810a9e3276c60daba549299d204ac962b\"\u003e\u003ccode\u003e315270b\u003c/code\u003e\u003c/a\u003e Docs: Reduce TOC depth of package pages and move module contents first.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/6dbba7f3c72f655b05b26ef453fdee31af13ccf5\"\u003e\u003ccode\u003e6dbba7f\u003c/code\u003e\u003c/a\u003e Docs: Show current year in copyright line.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/e4385bfa5d79527350d5ef17372fb70ba80b4cce\"\u003e\u003ccode\u003ee4385bf\u003c/code\u003e\u003c/a\u003e Update project income report.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/5bed1e1a227cd9ba5a879aaeacdf504093a3f6e8\"\u003e\u003ccode\u003e5bed1e1\u003c/code\u003e\u003c/a\u003e Validate file hashes in release download script.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/c13ee10a429f1144779bb1cbf6ae3bec808ae9c1\"\u003e\u003ccode\u003ec13ee10\u003c/code\u003e\u003c/a\u003e Prepare release of 6.1.0.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/lxml/lxml/compare/lxml-6.0.2...lxml-6.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `marshmallow` from 3.26.1 to 3.26.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/marshmallow-code/marshmallow/blob/dev/CHANGELOG.rst\"\u003emarshmallow's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.26.2 (2025-12-19)\u003c/h2\u003e\n\u003cp\u003eBug fixes:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:cve:\u003ccode\u003e2025-68480\u003c/code\u003e: Merge error store messages without rebuilding collections.\nThanks 카푸치노 for reporting and :user:\u003ccode\u003edeckar01\u003c/code\u003e for the fix.\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/marshmallow-code/marshmallow/commit/1407d5102ae020421ddc8425474e976325a9539e\"\u003e\u003ccode\u003e1407d51\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2878\"\u003e#2878\u003c/a\u003e from marshmallow-code/3.x-mypy-unreachable\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b2292f513845ccbd134bd55501a9bcbcdd18f8ac\"\u003e\u003ccode\u003eb2292f5\u003c/code\u003e\u003c/a\u003e Fix mypy errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/8acd211847244fa28e0174728ff310fddf0d7fa2\"\u003e\u003ccode\u003e8acd211\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/marshmallow-code/marshmallow/issues/2877\"\u003e#2877\u003c/a\u003e from marshmallow-code/3.x-delint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b4bcb4a96f16a3b94c1b52ac82a66b57bbee1d88\"\u003e\u003ccode\u003eb4bcb4a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] auto fixes from pre-commit.com hooks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/b78af7a0ea3102f8c2379bebe115a015e4018a62\"\u003e\u003ccode\u003eb78af7a\u003c/code\u003e\u003c/a\u003e Delint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/2c4451e5129411da79161add51cfc76fe852549d\"\u003e\u003ccode\u003e2c4451e\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/86d101a1aee2fe0a521c976015d1940437493cde\"\u003e\u003ccode\u003e86d101a\u003c/code\u003e\u003c/a\u003e Bump version and update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/489a8d421dc7955bb53b89e962d69465fbc5b6af\"\u003e\u003ccode\u003e489a8d4\u003c/code\u003e\u003c/a\u003e Only deep copy error message collections\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/6d4a17dad54ea9711040c6aa6ba4d59267242a41\"\u003e\u003ccode\u003e6d4a17d\u003c/code\u003e\u003c/a\u003e Add test coverage for error message modification\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/marshmallow-code/marshmallow/commit/0356a3f1c307830f8ded56d823abca5611c594c9\"\u003e\u003ccode\u003e0356a3f\u003c/code\u003e\u003c/a\u003e Merge error store messages without rebuilding collections\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/marshmallow-code/marshmallow/compare/3.26.1...3.26.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mistune` from 3.1.4 to 3.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/lepture/mistune/releases\"\u003emistune's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev3.2.1\u003c/h2\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eResolve Windows compatibility issues in file inclusion and tests  -  by \u003ca href=\"https://github.com/Yuki9814\"\u003e\u003ccode\u003e@​Yuki9814\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/2547102\"\u003e\u003c!-- raw HTML omitted --\u003e(25471)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape html text  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/a3cb6e5\"\u003e\u003c!-- raw HTML omitted --\u003e(a3cb6)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate link reference  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/85eb54f\"\u003e\u003c!-- raw HTML omitted --\u003e(85eb5)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle escaped dollar signs in inline math  -  by \u003ca href=\"https://github.com/saschabuehrle\"\u003e\u003ccode\u003e@​saschabuehrle\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/lepture/mistune/issues/370\"\u003elepture/mistune#370\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/7bd5709\"\u003e\u003c!-- raw HTML omitted --\u003e(7bd57)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape id of toc  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/04880a0\"\u003e\u003c!-- raw HTML omitted --\u003e(04880)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape id of headings  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/2855622\"\u003e\u003c!-- raw HTML omitted --\u003e(28556)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove double-encoding of image alt text  -  by \u003ca href=\"https://github.com/lawrence3699\"\u003e\u003ccode\u003e@​lawrence3699\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/0d6f3d8\"\u003e\u003c!-- raw HTML omitted --\u003e(0d6f3)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEscape xml for math plugin  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/5fa092e\"\u003e\u003c!-- raw HTML omitted --\u003e(5fa09)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse strict regex for image's height and width  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/8d0cb75\"\u003e\u003c!-- raw HTML omitted --\u003e(8d0cb)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/lepture/mistune/compare/v3.2.0...v3.2.1\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003ch2\u003ev3.2.0\u003c/h2\u003e\n\u003ch3\u003e   🚀 Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport footnotes that start on the next line.  -  by \u003ca href=\"https://github.com/kylechui\"\u003e\u003ccode\u003e@​kylechui\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/2677e2d\"\u003e\u003c!-- raw HTML omitted --\u003e(2677e)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eProperly handle code blocks inside footnotes.  -  by \u003ca href=\"https://github.com/kylechui\"\u003e\u003ccode\u003e@​kylechui\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/0516c9e\"\u003e\u003c!-- raw HTML omitted --\u003e(0516c)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport python 3.14  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/7e0eb65\"\u003e\u003c!-- raw HTML omitted --\u003e(7e0eb)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender ref links and footnotes in footnotes.  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/bd90e44\"\u003e\u003c!-- raw HTML omitted --\u003e(bd90e)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRender ref links in TOC.  -  by \u003ca href=\"https://github.com/lemon24\"\u003e\u003ccode\u003e@​lemon24\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/a0a0148\"\u003e\u003c!-- raw HTML omitted --\u003e(a0a01)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate typing for mypy upgrades  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/8d49cba\"\u003e\u003c!-- raw HTML omitted --\u003e(8d49c)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRender correct html for footnotes  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/lepture/mistune/commit/9b62204\"\u003e\u003c!-- raw HTML omitted --\u003e(9b622)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/lepture/mistune/compare/v3.1.4...v3.2.0\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\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/lepture/mistune/blob/main/docs/changes.rst\"\u003emistune's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.2.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 3, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEscape link in \u003ccode\u003erender_toc_ul\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eEscape text in math plugin.\u003c/li\u003e\n\u003cli\u003eFix regex for math plugin.\u003c/li\u003e\n\u003cli\u003eEscape heading's ID attribute.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eLINK_TITLE_RE\u003c/code\u003e to prevent DoS.\u003c/li\u003e\n\u003cli\u003eEscape class attribute for admonition directive.\u003c/li\u003e\n\u003cli\u003eRemove double-encoding of image alt text.\u003c/li\u003e\n\u003cli\u003eEscape class attribute for image directive.\u003c/li\u003e\n\u003cli\u003eFix width/height attribute for image directive.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.2.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on Dec 23, 2025\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAnnounce supports for python 3.14\u003c/li\u003e\n\u003cli\u003eFix footnotes plugins for code blocks, ref links, blockquote and etc.\u003c/li\u003e\n\u003cli\u003eFix ref links in TOC.\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/lepture/mistune/commit/067f90861088a496942f5eb43236135352b85d39\"\u003e\u003ccode\u003e067f908\u003c/code\u003e\u003c/a\u003e chore: release 3.2.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/bf5503067a7d8c3b065fb143f67a3a08eca77bb6\"\u003e\u003ccode\u003ebf55030\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/lepture/mistune/issues/438\"\u003e#438\u003c/a\u003e from saschabuehrle/fix/issue-370\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/8d0cb7539a9ac82e633b98476b9922632eb8b948\"\u003e\u003ccode\u003e8d0cb75\u003c/code\u003e\u003c/a\u003e fix: use strict regex for image's height and width\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/5fa092e3053b86f16e4c49b9d3ba0b7ab63f09ab\"\u003e\u003ccode\u003e5fa092e\u003c/code\u003e\u003c/a\u003e fix: escape xml for math plugin\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/71ec9477ebfcf8dab0068804baf2c77461d77fbb\"\u003e\u003ccode\u003e71ec947\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/lepture/mistune/issues/440\"\u003e#440\u003c/a\u003e from lawrence3699/fix/image-alt-double-encoding\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/0d6f3d850283d51e9c60e5a1b3c9343a18df3722\"\u003e\u003ccode\u003e0d6f3d8\u003c/code\u003e\u003c/a\u003e fix: remove double-encoding of image alt text\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/2855622d7fe235c6c805716edff943b5945d1eea\"\u003e\u003ccode\u003e2855622\u003c/code\u003e\u003c/a\u003e fix: escape id of headings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/04880a004cb28318e5ebd7ee9e63c79fc9f9ed04\"\u003e\u003ccode\u003e04880a0\u003c/code\u003e\u003c/a\u003e fix: escape id of toc\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/7bd57096715385062505b3f78972be9fa823d6d4\"\u003e\u003ccode\u003e7bd5709\u003c/code\u003e\u003c/a\u003e fix: handle escaped dollar signs in inline math (fixes \u003ca href=\"https://redirect.github.com/lepture/mistune/issues/370\"\u003e#370\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lepture/mistune/commit/85eb54ff17da26327399bf188f9ff9b8fd515278\"\u003e\u003ccode\u003e85eb54f\u003c/code\u003e\u003c/a\u003e fix: update link reference\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/lepture/mistune/compare/v3.1.4...v3.2.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nbconvert` from 7.16.6 to 7.17.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jupyter/nbconvert/releases\"\u003enbconvert's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.17.1\u003c/h2\u003e\n\u003ch2\u003e7.17.1\u003c/h2\u003e\n\u003cp\u003eThis is a security release, fixing two CVEs:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/security/advisories/GHSA-4c99-qj7h-p3vg\"\u003eCVE-2026-39377\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/security/advisories/GHSA-7jqv-fw35-gmx9\"\u003eCVE-2026-39378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(full advisories will be published seven days after release, on 2026-04-14).\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.17.0...b3b6ec01f872e9af8fd1769eb9cf1889c720ecf3\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow configureable WebPDF JavaScript processing timeout \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2250\"\u003e#2250\u003c/a\u003e (\u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\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 \u003ccode\u003ePermissionError\u003c/code\u003e when checking template paths on shared filesystems \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2252\"\u003e#2252\u003c/a\u003e (\u003ca href=\"https://github.com/ctcjab\"\u003e\u003ccode\u003e@​ctcjab\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTweak webpdf template logic to fix duplicate extension problem \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2249\"\u003e#2249\u003c/a\u003e (\u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance and upkeep improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003especify python version for pre \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2276\"\u003e#2276\u003c/a\u003e (\u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors to this release\u003c/h3\u003e\n\u003cp\u003eThe following people contributed discussions, new ideas, code and documentation contributions, and review.\nSee \u003ca href=\"https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports\"\u003eour definition of contributors\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/graphs/contributors?from=2026-01-29\u0026amp;to=2026-04-08\u0026amp;type=c\"\u003eGitHub contributors page for this release\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/akhmerov\"\u003e\u003ccode\u003e@​akhmerov\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Aakhmerov+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/bollwyvl\"\u003e\u003ccode\u003e@​bollwyvl\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Abollwyvl+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3ACarreau+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/ctcjab\"\u003e\u003ccode\u003e@​ctcjab\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Actcjab+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Adavidbrochart+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/Ken-B\"\u003e\u003ccode\u003e@​Ken-B\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3AKen-B+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Akrassowski+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/mgeier\"\u003e\u003ccode\u003e@​mgeier\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Amgeier+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Aminrk+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/mpacer\"\u003e\u003ccode\u003e@​mpacer\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Ampacer+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/MSeal\"\u003e\u003ccode\u003e@​MSeal\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3AMSeal+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/SylvainCorlay\"\u003e\u003ccode\u003e@​SylvainCorlay\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3ASylvainCorlay+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/takluyver\"\u003e\u003ccode\u003e@​takluyver\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Atakluyver+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Atimkpaine+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003ev7.17.0\u003c/h2\u003e\n\u003ch2\u003e7.17.0\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.16.6...c9ac1d1040459ed1ff9eb34e9918ce5a87cf9d71\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for arbitrary browser arguments \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2227\"\u003e#2227\u003c/a\u003e (\u003ca href=\"https://github.com/shreve\"\u003e\u003ccode\u003e@​shreve\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\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 QtPNGExporter returning empty bytes on macOS \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2264\"\u003e#2264\u003c/a\u003e (\u003ca href=\"https://github.com/h3pdesign\"\u003e\u003ccode\u003e@​h3pdesign\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/QuLogic\"\u003e\u003ccode\u003e@​QuLogic\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/jupyter/nbconvert/blob/main/CHANGELOG.md\"\u003enbconvert's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.17.1\u003c/h2\u003e\n\u003cp\u003eThis is a security release, fixing two CVEs:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/security/advisories/GHSA-4c99-qj7h-p3vg\"\u003eCVE-2026-39377\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/security/advisories/GHSA-7jqv-fw35-gmx9\"\u003eCVE-2026-39378\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(full advisories will be published seven days after release, on 2026-04-14).\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.17.0...b3b6ec01f872e9af8fd1769eb9cf1889c720ecf3\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow configureable WebPDF JavaScript processing timeout \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2250\"\u003e#2250\u003c/a\u003e (\u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\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 \u003ccode\u003ePermissionError\u003c/code\u003e when checking template paths on shared filesystems \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2252\"\u003e#2252\u003c/a\u003e (\u003ca href=\"https://github.com/ctcjab\"\u003e\u003ccode\u003e@​ctcjab\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eTweak webpdf template logic to fix duplicate extension problem \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2249\"\u003e#2249\u003c/a\u003e (\u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance and upkeep improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003especify python version for pre \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2276\"\u003e#2276\u003c/a\u003e (\u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eContributors to this release\u003c/h3\u003e\n\u003cp\u003eThe following people contributed discussions, new ideas, code and documentation contributions, and review.\nSee \u003ca href=\"https://github-activity.readthedocs.io/en/latest/use/#how-does-this-tool-define-contributions-in-the-reports\"\u003eour definition of contributors\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/graphs/contributors?from=2026-01-29\u0026amp;to=2026-04-08\u0026amp;type=c\"\u003eGitHub contributors page for this release\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/akhmerov\"\u003e\u003ccode\u003e@​akhmerov\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Aakhmerov+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/bollwyvl\"\u003e\u003ccode\u003e@​bollwyvl\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Abollwyvl+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3ACarreau+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/ctcjab\"\u003e\u003ccode\u003e@​ctcjab\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Actcjab+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/davidbrochart\"\u003e\u003ccode\u003e@​davidbrochart\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Adavidbrochart+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/Ken-B\"\u003e\u003ccode\u003e@​Ken-B\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3AKen-B+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Akrassowski+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/mgeier\"\u003e\u003ccode\u003e@​mgeier\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Amgeier+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Aminrk+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/mpacer\"\u003e\u003ccode\u003e@​mpacer\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Ampacer+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/MSeal\"\u003e\u003ccode\u003e@​MSeal\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3AMSeal+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/SylvainCorlay\"\u003e\u003ccode\u003e@​SylvainCorlay\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3ASylvainCorlay+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/takluyver\"\u003e\u003ccode\u003e@​takluyver\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Atakluyver+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e) | \u003ca href=\"https://github.com/timkpaine\"\u003e\u003ccode\u003e@​timkpaine\u003c/code\u003e\u003c/a\u003e (\u003ca href=\"https://github.com/search?q=repo%3Ajupyter%2Fnbconvert+involves%3Atimkpaine+updated%3A2026-01-29..2026-04-08\u0026amp;type=Issues\"\u003eactivity\u003c/a\u003e)\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003e7.17.0\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.16.6...c9ac1d1040459ed1ff9eb34e9918ce5a87cf9d71\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for arbitrary browser arguments \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2227\"\u003e#2227\u003c/a\u003e (\u003ca href=\"https://github.com/shreve\"\u003e\u003ccode\u003e@​shreve\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\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 QtPNGExporter returning empty bytes on macOS \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2264\"\u003e#2264\u003c/a\u003e (\u003ca href=\"https://github.com/h3pdesign\"\u003e\u003ccode\u003e@​h3pdesign\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/QuLogic\"\u003e\u003ccode\u003e@​QuLogic\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix CVE-2025-53000: Secure Inkscape Windows path (registry first + block CWD) \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2261\"\u003e#2261\u003c/a\u003e (\u003ca href=\"https://github.com/h3pdesign\"\u003e\u003ccode\u003e@​h3pdesign\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/mberlanda\"\u003e\u003ccode\u003e@​mberlanda\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/salmankadaya\"\u003e\u003ccode\u003e@​salmankadaya\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/th3gowtham\"\u003e\u003ccode\u003e@​th3gowtham\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix get_export_names and get_exporter default args \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2228\"\u003e#2228\u003c/a\u003e (\u003ca href=\"https://github.com/shreve\"\u003e\u003ccode\u003e@​shreve\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePyPA-Compliant Summary \u003ca href=\"https://redirect.github.com/jupyter/nbconvert/pull/2226\"\u003e#2226\u003c/a\u003e (\u003ca href=\"https://github.com/hackowitz-af\"\u003e\u003ccode\u003e@​hackowitz-af\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\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/jupyter/nbconvert/commit/78ed30837a607deab7cf0a12dca072bf3f63417a\"\u003e\u003ccode\u003e78ed308\u003c/code\u003e\u003c/a\u003e Publish 7.17.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/f090a64606fde4c7f87cbf478f51b4aa46a425ec\"\u003e\u003ccode\u003ef090a64\u003c/code\u003e\u003c/a\u003e ruff format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/b3b6ec01f872e9af8fd1769eb9cf1889c720ecf3\"\u003e\u003ccode\u003eb3b6ec0\u003c/code\u003e\u003c/a\u003e chore: update pre-commit hooks (\u003ca href=\"https://redirect.github.com/jupyter/nbconvert/issues/2277\"\u003e#2277\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/be4841f7da51c499b1937e41e6e71926dbe0daa3\"\u003e\u003ccode\u003ebe4841f\u003c/code\u003e\u003c/a\u003e ignore silly security lint in tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/26d57b295870f5572d9bd0535acee4a120339c10\"\u003e\u003ccode\u003e26d57b2\u003c/code\u003e\u003c/a\u003e fix type annotation on Lexer\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/0e6b8ccabf2aca6c18fac8c574f22b7155f441fb\"\u003e\u003ccode\u003e0e6b8cc\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/ba5e5cdd737704388251fa55fa9e58f5752fa39d\"\u003e\u003ccode\u003eba5e5cd\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/1db0c88d865146ce02b6405a8d96753d3d0cd0c2\"\u003e\u003ccode\u003e1db0c88\u003c/code\u003e\u003c/a\u003e Specify python version for pre (\u003ca href=\"https://redirect.github.com/jupyter/nbconvert/issues/2276\"\u003e#2276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/7473fc3037a6317bff54380e3a7162d73bf089b3\"\u003e\u003ccode\u003e7473fc3\u003c/code\u003e\u003c/a\u003e chore: update pre-commit hooks (\u003ca href=\"https://redirect.github.com/jupyter/nbconvert/issues/2242\"\u003e#2242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jupyter/nbconvert/commit/4322f7f290694929f414cefadc942111afad3762\"\u003e\u003ccode\u003e4322f7f\u003c/code\u003e\u003c/a\u003e Bump the actions group across 1 directory with 2 updates (\u003ca href=\"https://redirect.github.com/jupyter/nbconvert/issues/2273\"\u003e#2273\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jupyter/nbconvert/compare/v7.16.6...v7.17.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `nltk` from 3.9.2 to 3.9.4\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/nltk/nltk/blob/develop/ChangeLog\"\u003enltk's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eVersion 3.9.4 2026-03-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Python 3.14\u003c/li\u003e\n\u003cli\u003eFix bug in Levenshtein distance when substitution_cost \u0026gt; 2\u003c/li\u003e\n\u003cli\u003eFix bug in Treebank detokeniser re quote ordering\u003c/li\u003e\n\u003cli\u003eFix bug in Jaro similarity for empty strings\u003c/li\u003e\n\u003cli\u003eSeveral security enhancements\u003c/li\u003e\n\u003cli\u003eFix GHSA-rf74-v2fm-23pw: unbounded recursion in JSONTaggedDecoder\u003c/li\u003e\n\u003cli\u003eImplement TextTiling vocabulary introduction method (Hearst 1997)\u003c/li\u003e\n\u003cli\u003eFix ALINE feature matrix errors and add comprehensive tests\u003c/li\u003e\n\u003cli\u003eSupport multiple VerbNet versions, fix longid/shortid regex for VerbNet ids\u003c/li\u003e\n\u003cli\u003eLet downloader fallback to md5 when sha256 is unavailable\u003c/li\u003e\n\u003cli\u003eSeveral other minor bugfixes and code cleanups\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.9.4:\nMin-Yen Kan, Eric Kafe, Emily Voss, bowiechen, Hrudhai01,\njancallewaert, Mr-Neutr0n, pollak.peter89, ylwango613,\u003c/p\u003e\n\u003cp\u003eVersion 3.9.3 2026-02-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix CVE-2025-14009: secure ZIP extraction in nltk.downloader (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3468\"\u003e#3468\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock path traversal/arbitrary reads in nltk.data for protocol-less refs (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3467\"\u003e#3467\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBlock path traversal/abs paths in corpus readers and FS pointers (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3479\"\u003e#3479\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3480\"\u003e#3480\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate external StanfordSegmenter JARs using SHA256 (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3477\"\u003e#3477\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd optional sandbox enforcement for filestring() (\u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3485\"\u003e#3485\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMaintenance: downloader/zipped models, CI/tooling updates\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.9.3:\nChris Clauss, Eric Kafe, HyperPS, purificant, Shivansh-Game, Christopher Smith\u003c/p\u003e\n\u003cp\u003eVersion 3.9.2 2025-10-01\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate download checksums to use SHA256 in built index\u003c/li\u003e\n\u003cli\u003eFix percentage escape in new-style string formatting\u003c/li\u003e\n\u003cli\u003ereplace shortened URLs using goo.gl\u003c/li\u003e\n\u003cli\u003eMake Wordnet interoperable with various taggers and tagged corpora\u003c/li\u003e\n\u003cli\u003eFix saving PerceptronTagger\u003c/li\u003e\n\u003cli\u003eDocument how to reproduce old Wordnet studies\u003c/li\u003e\n\u003cli\u003eproperly initialize Portuguese corpus reader\u003c/li\u003e\n\u003cli\u003esupport for mixed rules conversion into Chomsky Normal Form\u003c/li\u003e\n\u003cli\u003eonly import tkinter if a GUI is needed\u003c/li\u003e\n\u003cli\u003eissue \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/2112\"\u003e#2112\u003c/a\u003e with Corenlp\u003c/li\u003e\n\u003cli\u003enew environment variable NLTK_DOWNLOADER_FORCE_INTERACTIVE_SHELL\u003c/li\u003e\n\u003cli\u003eLesk defaults to most frequent sense in case of ties\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to the following contributors to 3.9.2:\nJose Cols, Peter de Blanc, GeneralPoxter, Eric Kafe, William LaCroix, Jason Liu,\nSamer Masterson, Mike014, purificant, Andrew Ernest Ritz, samertm, Ikram Ul Haq,\nChristopher Smith, Ryan Mannion\u003c/p\u003e\n\u003cp\u003eVersion 3.9.1 2024-08-19\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/nltk/nltk/commit/ad9c96ba00a16923ffe917eacf63f1707bfa2d08\"\u003e\u003ccode\u003ead9c96b\u003c/code\u003e\u003c/a\u003e Update copyright year\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/7edcddfda566627b897397397cc4d10ae91cb86d\"\u003e\u003ccode\u003e7edcddf\u003c/code\u003e\u003c/a\u003e Updates for 3.9.4 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/67a2736f89b286b028db08bd247134f17a11fc6b\"\u003e\u003ccode\u003e67a2736\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3180\"\u003e#3180\u003c/a\u003e from yzhaoinuw/bug-on-edit_distance_align\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/2b17ac5358a1c8d4b97455766efde0b786e6cdb2\"\u003e\u003ccode\u003e2b17ac5\u003c/code\u003e\u003c/a\u003e Fix edit_distance_align backtrace for high substitution costs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/4b72976a6ff3d180ed4012f11843e611a8f89516\"\u003e\u003ccode\u003e4b72976\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3018\"\u003e#3018\u003c/a\u003e from JuanIMartinezB/bug/shortid-longid\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/8a5619f53a281149e5342b1a00fe05fe2fc6517f\"\u003e\u003ccode\u003e8a5619f\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3222\"\u003e#3222\u003c/a\u003e from Syzygy2048/feature/texttiling-vocabulary-introd...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/c6574d755e02b6163d9cd1d0b407076940e08864\"\u003e\u003ccode\u003ec6574d7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3289\"\u003e#3289\u003c/a\u003e from ihitamandal/codeflash/optimize-windowdiff-2024-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/98ff5d9eaa1a81511873b9aef857944519c28dc4\"\u003e\u003ccode\u003e98ff5d9\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3435\"\u003e#3435\u003c/a\u003e from Hrudhai01/fix-3260-detokenize-quotes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/aec4fce1b84ad725b8975f7365b23a4f626572a9\"\u003e\u003ccode\u003eaec4fce\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3522\"\u003e#3522\u003c/a\u003e from ekaf/pathsec\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/nltk/nltk/commit/eec4ee3591cb9cb8b8c2989f08012608c841d532\"\u003e\u003ccode\u003eeec4ee3\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/nltk/nltk/issues/3526\"\u003e#3526\u003c/a\u003e from nltk/update-contributing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/nltk/nltk/compare/3.9.2...3.9.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.4.2 to 6.10.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.10.2, 2026-04-15\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDo not rely on possibly invalid /Size for incremental cloning (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3735\"\u003e#3735\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\u003eIntroduce limits for FlateDecode parameters and image decoding (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3734\"\u003e#3734\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.10.1...6.10.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.10.1, 2026-04-14\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eLimit the allowed size of xref and object streams (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3733\"\u003e#3733\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\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eConsider strict mode setting for decryption errors (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3731\"\u003e#3731\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\u003eDocumentation (DOC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse new parameter names for compress_identical_objects 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.10.0...6.10.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.10.0, 2026-04-10\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDisallow custom XML entity declarations for XMP metadata (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3724\"\u003e#3724\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6...\n\n_Description has been truncated_","html_url":"https://github.com/tabrezahmed51/MiroFish_0118/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/tabrezahmed51%2FMiroFish_0118/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}}]}