{"id":667,"name":"certifi","ecosystem":"pip","repository_url":"https://github.com/certifi/python-certifi","issues_count":7997,"created_at":"2025-06-06T15:01:36.355Z","updated_at":"2025-06-06T15:01:36.355Z","purl":"pkg:pypi/certifi","metadata":{"id":2667280,"name":"certifi","ecosystem":"pypi","description":"Python package for providing Mozilla's CA Bundle.","homepage":"https://github.com/certifi/python-certifi","licenses":"MPL-2.0","normalized_licenses":["MPL-2.0"],"repository_url":"https://github.com/certifi/python-certifi","keywords_array":[],"namespace":null,"versions_count":64,"first_release_published_at":"2011-12-28T07:27:42.000Z","latest_release_published_at":"2025-04-26T02:12:27.000Z","latest_release_number":"2025.4.26","last_synced_at":"2025-06-06T15:30:31.628Z","created_at":"2022-04-10T10:19:05.530Z","updated_at":"2025-06-06T15:30:31.629Z","registry_url":"https://pypi.org/project/certifi/","install_command":"pip install certifi --index-url https://pypi.org/simple","documentation_url":"https://certifi.readthedocs.io/","metadata":{"funding":null,"documentation":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)","Natural Language :: English","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.6","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9"],"normalized_name":"certifi"},"repo_metadata":{"id":2118597,"uuid":"3060959","full_name":"certifi/python-certifi","owner":"certifi","description":"(Python Distribution) A carefully curated collection of Root Certificates for validating the trustworthiness of SSL certificates while verifying the identity of TLS hosts.","archived":false,"fork":false,"pushed_at":"2024-05-06T23:12:33.000Z","size":1245,"stargazers_count":769,"open_issues_count":4,"forks_count":238,"subscribers_count":39,"default_branch":"master","last_synced_at":"2024-05-18T11:04:28.105Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/certifi.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-12-28T05:15:19.000Z","updated_at":"2024-05-17T16:40:03.000Z","dependencies_parsed_at":"2023-07-05T19:16:28.312Z","dependency_job_id":"cb7a0ac9-c3e7-4d97-8bb8-1ab665297fc9","html_url":"https://github.com/certifi/python-certifi","commit_stats":{"total_commits":162,"total_committers":34,"mean_commits":4.764705882352941,"dds":0.6049382716049383,"last_synced_commit":"53da2405b1af430f6bafa21ba45d8dd8dfc726b8"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/certifi","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219006079,"owners_count":16423080,"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":"certifi","name":"Certifi","uuid":"7292629","kind":"organization","description":"Trust Database for Humans","email":null,"website":"http://certifiio.readthedocs.io/en/latest/","location":"CURL_CA_BUNDLE","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/7292629?v=4","repositories_count":9,"last_synced_at":"2024-03-25T19:58:29.082Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/certifi","funding_links":[],"total_stars":1222,"followers":34,"following":0,"created_at":"2022-11-02T16:22:49.404Z","updated_at":"2024-03-25T19:58:31.097Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/certifi","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/certifi/repositories"},"tags":[{"name":"2024.02.02","sha":"45eb6113c0cff15293611eedf237f7345dcf24bd","kind":"tag","published_at":"2024-02-02T01:20:43.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2024.02.02","html_url":"https://github.com/certifi/python-certifi/releases/tag/2024.02.02","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2024.02.02","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2024.02.02/manifests"},{"name":"2023.11.17","sha":"515962b01a24501c912c26ccced7ef8b47f81553","kind":"commit","published_at":"2023-11-18T01:03:40.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2023.11.17","html_url":"https://github.com/certifi/python-certifi/releases/tag/2023.11.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2023.11.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2023.11.17/manifests"},{"name":"2023.07.22","sha":"8fb96ed81f71e7097ed11bc4d9b19afd7ea5c909","kind":"commit","published_at":"2023-07-22T08:39:07.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2023.07.22","html_url":"https://github.com/certifi/python-certifi/releases/tag/2023.07.22","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2023.07.22","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2023.07.22/manifests"},{"name":"2023.05.07","sha":"8b3d7bae85bbc87c9181cc1d39548db3d31627f0","kind":"commit","published_at":"2023-05-07T07:30:19.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2023.05.07","html_url":"https://github.com/certifi/python-certifi/releases/tag/2023.05.07","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2023.05.07","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2023.05.07/manifests"},{"name":"2022.12.07","sha":"9e9e840925d7b8e76c76fdac1fab7e6e88c1c3b8","kind":"commit","published_at":"2022-12-07T20:13:03.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2022.12.07","html_url":"https://github.com/certifi/python-certifi/releases/tag/2022.12.07","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.12.07","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.12.07/manifests"},{"name":"2022.09.24","sha":"b81bdb269f1edb791bcd4ec8a9d0c053758f961a","kind":"commit","published_at":"2022-09-24T14:26:42.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2022.09.24","html_url":"https://github.com/certifi/python-certifi/releases/tag/2022.09.24","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.09.24","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.09.24/manifests"},{"name":"2022.09.14","sha":"939a28ffc57b1613770f572b584745c7b6d43e7d","kind":"commit","published_at":"2022-09-14T19:43:35.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2022.09.14","html_url":"https://github.com/certifi/python-certifi/releases/tag/2022.09.14","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.09.14","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.09.14/manifests"},{"name":"2022.06.15.2","sha":"aca828a78e73235a513dff9ebc181a47ef7dbf7b","kind":"commit","published_at":"2022-09-13T20:15:56.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2022.06.15.2","html_url":"https://github.com/certifi/python-certifi/releases/tag/2022.06.15.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.06.15.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.06.15.2/manifests"},{"name":"2022.06.15.1","sha":"b8eb5e9af9143b22b7f651942b393e369ed4c52a","kind":"commit","published_at":"2022-09-09T07:22:43.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2022.06.15.1","html_url":"https://github.com/certifi/python-certifi/releases/tag/2022.06.15.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.06.15.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.06.15.1/manifests"},{"name":"2022.06.15","sha":"9d514b4cad79357071c89d7dc4dc1b4df72bb997","kind":"commit","published_at":"2022-06-15T18:08:54.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2022.06.15","html_url":"https://github.com/certifi/python-certifi/releases/tag/2022.06.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.06.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.06.15/manifests"},{"name":"2022.05.18.1","sha":"75cc94d8495923e44f6c2fdecd907bc24795c785","kind":"commit","published_at":"2022-05-19T19:21:04.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2022.05.18.1","html_url":"https://github.com/certifi/python-certifi/releases/tag/2022.05.18.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.05.18.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.05.18.1/manifests"},{"name":"2022.05.18","sha":"e71328216bff7cb51c8682b092316e7aab132f1b","kind":"commit","published_at":"2022-05-18T19:11:29.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2022.05.18","html_url":"https://github.com/certifi/python-certifi/releases/tag/2022.05.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.05.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2022.05.18/manifests"},{"name":"2021.10.08","sha":"8effc0d8fd3e14e3db1f04c915246b82bb8c6107","kind":"commit","published_at":"2021-10-08T19:31:45.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2021.10.08","html_url":"https://github.com/certifi/python-certifi/releases/tag/2021.10.08","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2021.10.08","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2021.10.08/manifests"},{"name":"2021.05.30","sha":"8110050d8441d363c8057d5ad187c8ad5a862fc2","kind":"commit","published_at":"2021-05-30T16:19:52.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2021.05.30","html_url":"https://github.com/certifi/python-certifi/releases/tag/2021.05.30","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2021.05.30","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2021.05.30/manifests"},{"name":"2020.12.05","sha":"45a64658872a94a83c4b70fce02a96f0f29895e6","kind":"commit","published_at":"2020-12-05T20:30:05.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2020.12.05","html_url":"https://github.com/certifi/python-certifi/releases/tag/2020.12.05","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.12.05","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.12.05/manifests"},{"name":"2020.11.08","sha":"015cba9d2492a4cddaf5efe40666c18a2b259c93","kind":"commit","published_at":"2020-11-08T20:55:22.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2020.11.08","html_url":"https://github.com/certifi/python-certifi/releases/tag/2020.11.08","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.11.08","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.11.08/manifests"},{"name":"2020.06.20","sha":"f7e30d82841ef508158da706b7743b2d34018fb1","kind":"commit","published_at":"2020-06-20T16:09:20.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2020.06.20","html_url":"https://github.com/certifi/python-certifi/releases/tag/2020.06.20","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.06.20","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.06.20/manifests"},{"name":"2020.04.05.2","sha":"93ac6582f44d951ed88f3944043a8cc260dfa250","kind":"commit","published_at":"2020-06-07T09:36:20.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2020.04.05.2","html_url":"https://github.com/certifi/python-certifi/releases/tag/2020.04.05.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.04.05.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.04.05.2/manifests"},{"name":"2020.04.05.1","sha":"87836b37e2b793d8f54b53c564a4585a024dd929","kind":"commit","published_at":"2020-04-05T20:09:49.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2020.04.05.1","html_url":"https://github.com/certifi/python-certifi/releases/tag/2020.04.05.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.04.05.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.04.05.1/manifests"},{"name":"2020.04.05","sha":"341e59d1fb3d526d3e7f2b63de3ffb7ba1d1d74b","kind":"commit","published_at":"2020-04-05T15:50:54.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2020.04.05","html_url":"https://github.com/certifi/python-certifi/releases/tag/2020.04.05","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.04.05","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2020.04.05/manifests"},{"name":"2019.11.28","sha":"21abb9b9bbf4c0cfecf652fadafee3eb9615d553","kind":"commit","published_at":"2019-11-28T08:22:42.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2019.11.28","html_url":"https://github.com/certifi/python-certifi/releases/tag/2019.11.28","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2019.11.28","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2019.11.28/manifests"},{"name":"2019.09.11","sha":"258de09f05f0096432bfb751612bb7b6b68d9107","kind":"commit","published_at":"2019-09-11T18:59:54.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2019.09.11","html_url":"https://github.com/certifi/python-certifi/releases/tag/2019.09.11","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2019.09.11","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2019.09.11/manifests"},{"name":"2019.06.16","sha":"84dc7666c2a09d5a428755b02eb7830c86bb9caa","kind":"commit","published_at":"2019-06-16T14:15:24.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2019.06.16","html_url":"https://github.com/certifi/python-certifi/releases/tag/2019.06.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2019.06.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2019.06.16/manifests"},{"name":"2019.03.09","sha":"401100fe95e8a807ab096e767b7d42fe86bdd1ee","kind":"commit","published_at":"2019-03-09T11:48:57.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2019.03.09","html_url":"https://github.com/certifi/python-certifi/releases/tag/2019.03.09","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2019.03.09","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2019.03.09/manifests"},{"name":"2018.11.29","sha":"10a1f8a56c9675fa87c42abad25183adbc3bc783","kind":"commit","published_at":"2018-11-29T19:56:21.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2018.11.29","html_url":"https://github.com/certifi/python-certifi/releases/tag/2018.11.29","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.11.29","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.11.29/manifests"},{"name":"2018.10.15","sha":"6f0b77146602bde85c0225b3aea99d94b702a7e8","kind":"commit","published_at":"2018-10-15T13:12:57.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2018.10.15","html_url":"https://github.com/certifi/python-certifi/releases/tag/2018.10.15","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.10.15","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.10.15/manifests"},{"name":"2018.08.24","sha":"8be9f899232acbf9cf32822e861964dbb27e44ed","kind":"commit","published_at":"2018-08-24T09:23:05.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2018.08.24","html_url":"https://github.com/certifi/python-certifi/releases/tag/2018.08.24","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.08.24","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.08.24/manifests"},{"name":"2018.08.13","sha":"728bb51e8a248a353c0b743bc55802c5a1ec5e64","kind":"commit","published_at":"2018-08-13T07:10:56.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2018.08.13","html_url":"https://github.com/certifi/python-certifi/releases/tag/2018.08.13","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.08.13","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.08.13/manifests"},{"name":"2018.04.16","sha":"bf1224e31f12c9bde8d83ac5c8d2c2360ad5640b","kind":"commit","published_at":"2018-04-16T18:49:50.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2018.04.16","html_url":"https://github.com/certifi/python-certifi/releases/tag/2018.04.16","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.04.16","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.04.16/manifests"},{"name":"2018.01.18","sha":"e22525313129970e8b8623fca8c9ab7137dc2e8f","kind":"commit","published_at":"2018-01-18T20:30:28.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2018.01.18","html_url":"https://github.com/certifi/python-certifi/releases/tag/2018.01.18","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.01.18","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2018.01.18/manifests"},{"name":"2017.11.05","sha":"2669f7bdbdf4dd35fb739babfcbf197c687462b1","kind":"commit","published_at":"2017-11-05T13:22:36.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2017.11.05","html_url":"https://github.com/certifi/python-certifi/releases/tag/2017.11.05","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.11.05","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.11.05/manifests"},{"name":"2017.07.27.1","sha":"b40e53e5ed1eb74757e0bdae0d9cc2b9e273eccd","kind":"commit","published_at":"2017-07-27T15:45:56.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2017.07.27.1","html_url":"https://github.com/certifi/python-certifi/releases/tag/2017.07.27.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.07.27.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.07.27.1/manifests"},{"name":"2017.07.27","sha":"b8595f24d2299af67057d5c66cf36e5de77628fc","kind":"commit","published_at":"2017-07-27T15:42:00.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2017.07.27","html_url":"https://github.com/certifi/python-certifi/releases/tag/2017.07.27","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.07.27","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.07.27/manifests"},{"name":"2017.04.17","sha":"4f35e3529c78ced74040cf5d80bf8ec4aac9a190","kind":"commit","published_at":"2017-04-17T19:36:13.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2017.04.17","html_url":"https://github.com/certifi/python-certifi/releases/tag/2017.04.17","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.04.17","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.04.17/manifests"},{"name":"2017.01.23","sha":"9f9dc30f1d9e46b3ae6f9b29ee4d2e433010ff33","kind":"commit","published_at":"2017-01-23T21:20:39.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2017.01.23","html_url":"https://github.com/certifi/python-certifi/releases/tag/2017.01.23","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.01.23","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2017.01.23/manifests"},{"name":"2016.09.26","sha":"f3bb7957567af5b278de5fe043e571c93cf14eb4","kind":"commit","published_at":"2016-09-26T11:50:03.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2016.09.26","html_url":"https://github.com/certifi/python-certifi/releases/tag/2016.09.26","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.09.26","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.09.26/manifests"},{"name":"2016.08.31","sha":"8eab47bb64c659749cd0295b2b47ef1ef9f586d0","kind":"commit","published_at":"2016-08-31T16:24:54.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2016.08.31","html_url":"https://github.com/certifi/python-certifi/releases/tag/2016.08.31","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.08.31","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.08.31/manifests"},{"name":"2016.08.08","sha":"8fc70197645ba5e2435c717ef6e44402ee2605bc","kind":"commit","published_at":"2016-08-08T13:11:34.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2016.08.08","html_url":"https://github.com/certifi/python-certifi/releases/tag/2016.08.08","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.08.08","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.08.08/manifests"},{"name":"2016.08.02","sha":"d86d2360bbf1eea9d37368d77dbd697fa9be674c","kind":"commit","published_at":"2016-08-02T08:06:55.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2016.08.02","html_url":"https://github.com/certifi/python-certifi/releases/tag/2016.08.02","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.08.02","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.08.02/manifests"},{"name":"2016.02.28","sha":"38502797954603558ebf5f2c93f3645279e18158","kind":"commit","published_at":"2016-02-28T14:33:32.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2016.02.28","html_url":"https://github.com/certifi/python-certifi/releases/tag/2016.02.28","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.02.28","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2016.02.28/manifests"},{"name":"2015.11.20.1","sha":"385476b4aff36547395e59dc3f633b9f37ae2fe3","kind":"commit","published_at":"2015-11-30T11:17:18.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2015.11.20.1","html_url":"https://github.com/certifi/python-certifi/releases/tag/2015.11.20.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.11.20.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.11.20.1/manifests"},{"name":"2015.11.20","sha":"b9edccc6183cfb2f4e8bb04a920bcbb1e13f9fbe","kind":"commit","published_at":"2015-11-20T09:18:09.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2015.11.20","html_url":"https://github.com/certifi/python-certifi/releases/tag/2015.11.20","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.11.20","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.11.20/manifests"},{"name":"2015.09.06.2","sha":"d7e6af260efb4cab6c9d51f870ca39cd2741ffd0","kind":"commit","published_at":"2015-09-07T15:42:10.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2015.09.06.2","html_url":"https://github.com/certifi/python-certifi/releases/tag/2015.09.06.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.09.06.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.09.06.2/manifests"},{"name":"2015.09.06.1","sha":"4b41b8c8cf49d5eb191544520c7201cc8dc87c1c","kind":"commit","published_at":"2015-09-06T03:32:21.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2015.09.06.1","html_url":"https://github.com/certifi/python-certifi/releases/tag/2015.09.06.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.09.06.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.09.06.1/manifests"},{"name":"2015.09.06","sha":"e62c737f2e89f04e49ab21f551c1725dd6b75e31","kind":"commit","published_at":"2015-09-06T02:51:57.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2015.09.06","html_url":"https://github.com/certifi/python-certifi/releases/tag/2015.09.06","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.09.06","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.09.06/manifests"},{"name":"2015.04.28","sha":"04f5882b59f1dc80b8019f6be767c95751502cd0","kind":"commit","published_at":"2015-04-28T17:38:49.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/2015.04.28","html_url":"https://github.com/certifi/python-certifi/releases/tag/2015.04.28","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.04.28","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/2015.04.28/manifests"},{"name":"v1.0.1","sha":"4bbd7cee108b348f5829be7e2c35e25e6ac5991f","kind":"commit","published_at":"2014-03-10T13:24:59.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/v1.0.1","html_url":"https://github.com/certifi/python-certifi/releases/tag/v1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/v1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/v1.0.1/manifests"},{"name":"v1.0.0","sha":"08f47619d21fcf7529a8f8aa970d4662be240aa6","kind":"commit","published_at":"2014-01-17T19:14:07.000Z","download_url":"https://codeload.github.com/certifi/python-certifi/tar.gz/v1.0.0","html_url":"https://github.com/certifi/python-certifi/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/certifi%2Fpython-certifi/tags/v1.0.0/manifests"}]},"repo_metadata_updated_at":"2024-10-29T19:52:41.031Z","dependent_packages_count":3902,"downloads":761234538,"downloads_period":"last-month","dependent_repos_count":415524,"rankings":{"downloads":0.0007336662955537989,"dependent_repos_count":0.0009170828694422486,"dependent_packages_count":0.008253745824980237,"stargazers_count":3.110745093148107,"forks_count":4.1512673168172824,"docker_downloads_count":0.0011004994433306983,"average":1.2121695673997828},"purl":"pkg:pypi/certifi","advisories":[{"uuid":"GSA_kwCzR0hTQS0yNDh2LTM0NnctOWN3Y84AA9m3","url":"https://github.com/advisories/GHSA-248v-346w-9cwc","title":"Certifi removes GLOBALTRUST root certificate","description":"Certifi 2024.07.04 removes root certificates from \"GLOBALTRUST\" from the root store. These are in the process of being removed from Mozilla's trust store.\n\nGLOBALTRUST's root certificates are being removed pursuant to an investigation which identified \"long-running and unresolved compliance issues\". Conclusions of Mozilla's investigation can be found [here]( https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/XpknYMPO8dI).","origin":"UNSPECIFIED","severity":"LOW","published_at":"2024-07-05T20:06:40.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/certifi/python-certifi/security/advisories/GHSA-248v-346w-9cwc","https://github.com/certifi/python-certifi/commit/bd8153872e9c6fc98f4023df9c2deaffea2fa463","https://nvd.nist.gov/vuln/detail/CVE-2024-39689","https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/XpknYMPO8dI","https://security.netapp.com/advisory/ntap-20241206-0001","https://github.com/pypa/advisory-database/tree/main/vulns/certifi/PYSEC-2024-230.yaml","https://github.com/advisories/GHSA-248v-346w-9cwc"],"source_kind":"github","identifiers":["GHSA-248v-346w-9cwc","CVE-2024-39689"],"repository_url":"https://github.com/certifi/python-certifi","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"2024.7.4","vulnerable_version_range":"\u003e= 2021.5.30, \u003c 2024.7.4"}],"ecosystem":"pypi","package_name":"certifi"}],"created_at":"2024-07-05T21:05:26.644Z","updated_at":"2025-02-13T00:44:20.000Z","epss_percentage":0.01928,"epss_percentile":0.82507},{"uuid":"GSA_kwCzR0hTQS14cXI4LTdqd3ItcmhwN84AA04J","url":"https://github.com/advisories/GHSA-xqr8-7jwr-rhp7","title":"Removal of e-Tugra root certificate","description":"Certifi 2023.07.22 removes root certificates from \"e-Tugra\" from the root store. These are in the process of being removed from Mozilla's trust store.\n\n e-Tugra's root certificates are being removed pursuant to an investigation prompted by reporting of security issues in their systems. Conclusions of Mozilla's investigation can be found [here](https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/C-HrP1SEq1A).","origin":"UNSPECIFIED","severity":"HIGH","published_at":"2023-07-25T14:43:53.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":0.0,"cvss_vector":null,"references":["https://github.com/certifi/python-certifi/security/advisories/GHSA-xqr8-7jwr-rhp7","https://github.com/certifi/python-certifi/commit/8fb96ed81f71e7097ed11bc4d9b19afd7ea5c909","https://nvd.nist.gov/vuln/detail/CVE-2023-37920","https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/C-HrP1SEq1A","https://github.com/pypa/advisory-database/tree/main/vulns/certifi/PYSEC-2023-135.yaml","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/5EX6NG7WUFNUKGFHLM35KHHU3GAKXRTG","https://security.netapp.com/advisory/ntap-20240912-0002","https://github.com/advisories/GHSA-xqr8-7jwr-rhp7"],"source_kind":"github","identifiers":["GHSA-xqr8-7jwr-rhp7","CVE-2023-37920"],"repository_url":"https://github.com/certifi/python-certifi","blast_radius":0.0,"packages":[{"versions":[{"first_patched_version":"2023.7.22","vulnerable_version_range":"\u003e= 2015.4.28, \u003c 2023.7.22"}],"ecosystem":"pypi","package_name":"certifi"}],"created_at":"2023-07-25T15:03:52.355Z","updated_at":"2025-06-03T01:10:56.475Z","epss_percentage":0.00112,"epss_percentile":0.30834},{"uuid":"GSA_kwCzR0hTQS00M2ZwLXJodjItNWd2OM4AAwM2","url":"https://github.com/advisories/GHSA-43fp-rhv2-5gv8","title":"Certifi removing TrustCor root certificate","description":"Certifi 2022.12.07 removes root certificates from \"TrustCor\" from the root store. These are in the process of being removed from Mozilla's trust store.\n\nTrustCor's root certificates are being removed pursuant to an investigation prompted by media reporting that TrustCor's ownership also operated a business that produced spyware. Conclusions of Mozilla's investigation can be found [here](https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/oxX69KFvsm4/m/yLohoVqtCgAJ).","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2022-12-07T23:05:18.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":5.9,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:H/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N","references":["https://github.com/certifi/python-certifi/security/advisories/GHSA-43fp-rhv2-5gv8","https://github.com/certifi/python-certifi/commit/9e9e840925d7b8e76c76fdac1fab7e6e88c1c3b8","https://groups.google.com/a/mozilla.org/g/dev-security-policy/c/oxX69KFvsm4/m/yLohoVqtCgAJ","https://nvd.nist.gov/vuln/detail/CVE-2022-23491","https://github.com/pypa/advisory-database/tree/main/vulns/certifi/PYSEC-2022-42986.yaml","https://security.netapp.com/advisory/ntap-20230223-0010","https://github.com/advisories/GHSA-43fp-rhv2-5gv8"],"source_kind":"github","identifiers":["GHSA-43fp-rhv2-5gv8","CVE-2022-23491"],"repository_url":"https://github.com/certifi/python-certifi","blast_radius":33.14971706668529,"packages":[{"versions":[{"first_patched_version":"2022.12.07","vulnerable_version_range":"\u003e= 2017.11.05, \u003c 2022.12.07"}],"ecosystem":"pypi","package_name":"certifi"}],"created_at":"2022-12-21T16:11:46.322Z","updated_at":"2025-02-12T18:33:28.000Z","epss_percentage":0.00038,"epss_percentile":0.10486}],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/certifi","docker_dependents_count":32865,"docker_downloads_count":15819343244,"usage_url":"https://repos.ecosyste.ms/usage/pypi/certifi","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/certifi/dependencies","status":null,"funding_links":[],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/certifi/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/certifi/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/certifi/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/certifi/related_packages","maintainers":[{"uuid":"Lukasa","login":"Lukasa","name":null,"email":null,"url":null,"packages_count":23,"html_url":"https://pypi.org/user/Lukasa/","role":null,"created_at":"2023-02-09T13:41:11.139Z","updated_at":"2023-02-09T13:41:11.139Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/Lukasa/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690322,"maintainers_count":292759,"namespaces_count":0,"keywords_count":228590,"github":"pypi","metadata":{"funded_packages_count":48950},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2025-06-06T05:32:09.692Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},"unique_repositories_count":3494,"unique_repositories_count_past_30_days":15,"recent_issues":[{"uuid":"4964417245","node_id":"PR_kwDOSuNyS871pZua","number":26,"state":"open","title":"build(deps): Bump the dependencies group across 3 directories with 73 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-24T01:50:20.000Z","updated_at":"2026-07-24T01:50:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"dependencies","update_count":73,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"bleach","old_version":"4.1.0","new_version":"6.4.0","repository_url":"https://github.com/mozilla/bleach"},{"name":"blessed","old_version":"1.39.0","new_version":"1.47.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.43.8","new_version":"1.43.50","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.8","new_version":"1.43.50","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"django","old_version":"5.2.14","new_version":"6.0.7","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.18.0","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.1","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-markdownify","old_version":"0.9.1","new_version":"0.9.7","repository_url":"https://github.com/erwinmatijsen/django-markdownify"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-oauth-toolkit","old_version":"3.2.0","new_version":"3.3.0","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-redis","old_version":"6.0.0","new_version":"7.0.0","repository_url":"https://github.com/jazzband/django-redis"},{"name":"django-structlog","old_version":"10.0.0","new_version":"10.1.0","repository_url":"https://github.com/jrobichaud/django-structlog"},{"name":"docutils","old_version":"0.22.4","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.2.1","new_version":"1.2.11","repository_url":"https://github.com/dulwich/dulwich"},{"name":"fido2","old_version":"2.2.0","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"icalendar","old_version":"7.1.0","new_version":"7.2.0","repository_url":"https://github.com/collective/icalendar"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"jwcrypto","old_version":"1.5.7","new_version":"1.5.8","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"lxml","old_version":"6.1.0","new_version":"6.1.1","repository_url":"https://github.com/lxml/lxml"},{"name":"nh3","old_version":"0.3.5","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"prettytable","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/prettytable/prettytable"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.35.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pypdf","old_version":"6.11.0","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"python-fsutil","old_version":"0.16.1","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"redis","old_version":"7.4.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"0.30.0","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.17.0","new_version":"0.19.1","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.60.0","new_version":"2.66.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"setuptools","old_version":"82.0.1","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.4","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.7.0","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"weasyprint","old_version":"68.1","new_version":"69.0","repository_url":"https://github.com/Kozea/WeasyPrint"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.2.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zipp","old_version":"3.23.1","new_version":"4.1.0","repository_url":"https://github.com/jaraco/zipp"},{"name":"zopfli","old_version":"0.4.1","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.14.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-stubs","old_version":"6.0.4","new_version":"6.0.7","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.4","new_version":"6.0.7","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"pip","old_version":"26.1.1","new_version":"26.1.2","repository_url":"https://github.com/pypa/pip"},{"name":"prek","old_version":"0.4.0","new_version":"0.4.10","repository_url":"https://github.com/j178/prek"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.60","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260509","new_version":"2.9.21.20260712","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20260510","new_version":"6.0.12.20260518","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 1 update in the /contrib/dev_reqs directory: [jc](https://github.com/kellyjonbrazil/jc).\nBumps the dependencies group with 2 updates in the /docs directory: [mkdocs-git-revision-date-localized-plugin](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 70 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [bleach](https://github.com/mozilla/bleach) | `4.1.0` | `6.4.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.39.0` | `1.47.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.8` | `1.43.50` |\n| [botocore](https://github.com/boto/botocore) | `1.43.8` | `1.43.50` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.6.17` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [django](https://github.com/django/django) | `5.2.14` | `6.0.7` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.18.0` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.1` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) | `0.9.1` | `0.9.7` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.2.0` | `3.3.0` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-redis](https://github.com/jazzband/django-redis) | `6.0.0` | `7.0.0` |\n| [django-structlog](https://github.com/jrobichaud/django-structlog) | `10.0.0` | `10.1.0` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.4` | `0.23` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.2.1` | `1.2.11` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.2.0` | `2.2.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.82.1` |\n| [icalendar](https://github.com/collective/icalendar) | `7.1.0` | `7.2.0` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.7` | `1.5.8` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.0` | `6.1.1` |\n| [nh3](https://github.com/messense/nh3) | `0.3.5` | `0.3.6` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.62b1` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [prettytable](https://github.com/prettytable/prettytable) | `3.17.0` | `3.18.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.35.1` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.11.0` | `6.14.2` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.1` | `0.17.0` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.0.1` |\n| [rpds-py](https://github.com/crate-py/rpds) | `0.30.0` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.17.0` | `0.19.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.60.0` | `2.66.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `83.0.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.4` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.2` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.7.0` | `0.8.2` |\n| [weasyprint](https://github.com/Kozea/WeasyPrint) | `68.1` | `69.0` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.2.2` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.1` | `4.1.0` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.1` | `0.4.3` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.15.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.4` | `6.0.7` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.4` | `6.0.7` |\n| [pip](https://github.com/pypa/pip) | `26.1.1` | `26.1.2` |\n| [prek](https://github.com/j178/prek) | `0.4.0` | `0.4.10` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.60` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260509` | `2.9.21.20260712` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260510` | `6.0.12.20260518` |\n\n\nUpdates `jc` from 1.25.6 to 1.25.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kellyjonbrazil/jc/releases\"\u003ejc's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eJC version 1.25.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kellyjonbrazil/jc/blob/master/CHANGELOG\"\u003ejc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ejc changelog\u003c/p\u003e\n\u003cp\u003e20260617 v1.25.7\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20251012 v1.25.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-localgroup\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-user\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eroute-print\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etraceroute-s\u003c/code\u003e streaming command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_hops\u003c/code\u003e and \u003ccode\u003edata_bytes\u003c/code\u003e fields to \u003ccode\u003etraceroute\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ex509-crl\u003c/code\u003e file parser to support Certificate Revocation List PEM and DER files\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyay\u003c/code\u003e as a magic command for the \u003ccode\u003epacman\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e command parser to support output with the \u003ccode\u003ecable_pairing\u003c/code\u003e attribute\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support blank \u003ccode\u003eteam.config\u003c/code\u003e JSON value and \u003ccode\u003eteam-port.config\u003c/code\u003e JSON value\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etop\u003c/code\u003e command parsers to correct memory size field parsing. Several new unit\nand byte conversion fields have been added\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ewho\u003c/code\u003e command parser to support the \u003ccode\u003eprocess\u003c/code\u003e field on Debian13\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20250503 v1.25.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eamixer\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003eiptables\u003c/code\u003e command parser to add default policy statistics fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e parser failing to parse controllers with power state prop\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsblk\u003c/code\u003e command parser to support multiple mountpoints. Also, added\nbyte conversions for size fields.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support \u003ccode\u003eteam.config\u003c/code\u003e JSON field\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etime\u003c/code\u003e command parser for output that does not contain centiseconds\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ex509-cert\u003c/code\u003e parser to handle IDNA2008 encoded email addresses with a warning\u003c/li\u003e\n\u003cli\u003eFix typing for upcoming python v3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/8290734a87a30e5f0af7e1fba5ecbda2e1c145a8\"\u003e\u003ccode\u003e8290734\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/712\"\u003e#712\u003c/a\u003e from kellyjonbrazil/dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/9d11e1fe5bbdfb9f68b001940a7ae235b68db637\"\u003e\u003ccode\u003e9d11e1f\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/3a2946b6584f2128917ffe908f749498b8c5ea5c\"\u003e\u003ccode\u003e3a2946b\u003c/code\u003e\u003c/a\u003e add streaming csv-ih, tsv, and tsv-ih parsers with doc fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/22ff0e33c3957c929d45864cc9790b8f7b6fe9c8\"\u003e\u003ccode\u003e22ff0e3\u003c/code\u003e\u003c/a\u003e fix for python 3.15 behavior changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/fab550e3b8fef49abe297c5ac4f0b2f9b330d3a9\"\u003e\u003ccode\u003efab550e\u003c/code\u003e\u003c/a\u003e docs: fix typos (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/711\"\u003e#711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/6e79f08c9083836467711e6965f5ca18b1505674\"\u003e\u003ccode\u003e6e79f08\u003c/code\u003e\u003c/a\u003e Add TSV alias and CSV/TSV \u0026quot;No Header\u0026quot; alias (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/900aed5d880f2c1150739976bfbfb1f87e64cbc9\"\u003e\u003ccode\u003e900aed5\u003c/code\u003e\u003c/a\u003e fix tests and update docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/676695eacf75aa01920b89bb1809ee96e47d20bb\"\u003e\u003ccode\u003e676695e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/701\"\u003e#701\u003c/a\u003e from jeffdyke/feature/certs-with-cert-name\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/30c75073044dd364174b080709e9fb6c870ce82e\"\u003e\u003ccode\u003e30c7507\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/7d801f30bb9b35b60938c193d76227f5a3473b50\"\u003e\u003ccode\u003e7d801f3\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kellyjonbrazil/jc/compare/v1.25.6...v1.25.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-git-revision-date-localized-plugin` from 1.5.2 to 1.5.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/releases\"\u003emkdocs-git-revision-date-localized-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix paths in MANIFEST.in by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/30e58767a16cd9ec1dd2669f0bdc1af8630af18c\"\u003e\u003ccode\u003e30e5876\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/d58c5becb14bcd4a6143768fb3b7478954c09133\"\u003e\u003ccode\u003ed58c5be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/211\"\u003e#211\u003c/a\u003e from mitya57/fix-manifest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/6da0b4ea1b8c379164a4f1db8e005e98a0b4557d\"\u003e\u003ccode\u003e6da0b4e\u003c/code\u003e\u003c/a\u003e Fix paths in MANIFEST.in\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/aa0d4a3b93f6c4cc36afbf2d8def4af5566d0834\"\u003e\u003ccode\u003eaa0d4a3\u003c/code\u003e\u003c/a\u003e Constrain mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.4 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bleach` from 4.1.0 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mozilla/bleach/blob/main/CHANGES\"\u003ebleach's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.4.0 (June 5th, 2026)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNOTE: 2026-06-05: Bleach is no longer maintained. There will be no future\nreleases including for security issues.\u003c/strong\u003e\nSee issue: \u003ccode\u003e\u0026lt;https://github.com/mozilla/bleach/issues/698\u0026gt;\u003c/code\u003e__\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eBackwards incompatible changes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for pypy 3.10. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/764\"\u003e#764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix bug 2023812 / GHSA-8rfp-98v4-mmr6.\u003c/p\u003e\n\u003cp\u003eFix XSS issue with sanitize_uri_value where disallowed schemes with\nUnicode invisible characters wouldn't be rejected.\u003c/p\u003e\n\u003cp\u003eFor example::\u003c/p\u003e\n\u003cp\u003eimport bleach\npayload1 = '\u003c!-- raw HTML omitted --\u003eClick\u003c!-- raw HTML omitted --\u003e'\nresult1 = bleach.clean(payload1)\nprint(repr(result1))\u003c/p\u003e\n\u003cp\u003eoutputs::\u003c/p\u003e\n\u003cp\u003e'\u003c!-- raw HTML omitted --\u003eClick\u003c!-- raw HTML omitted --\u003e'\u003c/p\u003e\n\u003cp\u003eSee the advisory for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix GHSA-gj48-438w-jh9v.\u003c/p\u003e\n\u003cp\u003eFix issue where URI sanitization wasn't happening in formaction attributes.\u003c/p\u003e\n\u003cp\u003eSee the advisory for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for pypy 3.11. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/764\"\u003e#764\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop version max in tinycss2 pin. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/772\"\u003e#772\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis removes one of the things we had to keep checking and updating. Users\nnow own the responsibility for correctness with the version of tinycss2\nthey're using.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 6.3.0 (October 27th, 2025)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/f0355a7af00500482c5292c6c83290c6a178068d\"\u003e\u003ccode\u003ef0355a7\u003c/code\u003e\u003c/a\u003e fix: fix last release date in CHANGES\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/ae4e8a26706516ad01b92e66321b480208a440da\"\u003e\u003ccode\u003eae4e8a2\u003c/code\u003e\u003c/a\u003e chore: bleach 6.4.0 and final release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/970df58e9f0c55cc52244f3f0106e473a40d886d\"\u003e\u003ccode\u003e970df58\u003c/code\u003e\u003c/a\u003e fix: uri-sanitization in formaction attributes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/7c4867c32344d1c961107fae62240a6f0dc680dc\"\u003e\u003ccode\u003e7c4867c\u003c/code\u003e\u003c/a\u003e fix: xss bypass in allowed protocol test using unicode invisible characters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/913ab75992b845e2c9c060c41f24d46921db4693\"\u003e\u003ccode\u003e913ab75\u003c/code\u003e\u003c/a\u003e fix: reduce redundancy in workflow jobs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/218c15af455c8dec14f98fcb2e235f8680e93930\"\u003e\u003ccode\u003e218c15a\u003c/code\u003e\u003c/a\u003e fix: rework pip caching\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/4f0b097bf80548a022050e2f71f024d755a9f154\"\u003e\u003ccode\u003e4f0b097\u003c/code\u003e\u003c/a\u003e fix: fix tox platform restrictions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/e95a79d07bb5d792425c2bc0ef5dd03f6614f3bb\"\u003e\u003ccode\u003ee95a79d\u003c/code\u003e\u003c/a\u003e chore: update pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/91539d4e80d4685b8f2bedc79076ff0ff6c1b911\"\u003e\u003ccode\u003e91539d4\u003c/code\u003e\u003c/a\u003e Bump actions/cache from 5.0.3 to 5.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/cd47b4ce495859065da23c2116f651e591e1e90d\"\u003e\u003ccode\u003ecd47b4c\u003c/code\u003e\u003c/a\u003e fix: handle left-angle-bracket that's not a tag (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mozilla/bleach/compare/v4.1.0...v6.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `blessed` from 1.39.0 to 1.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jquast/blessed/releases\"\u003eblessed's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.46\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix DA1 response for some terminals (kitty) by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/392\"\u003ejquast/blessed#392\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved remote truecolor detection by unique TERM by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/394\"\u003ejquast/blessed#394\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd sugar for some extended capabilities by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/393\"\u003ejquast/blessed#393\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.45...1.46\"\u003ehttps://github.com/jquast/blessed/compare/1.45...1.46\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.43: bugfix leaked XTGETTCAP responses into inkey()\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix leaked XTGETTCAP responses into inkey() by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/383\"\u003ejquast/blessed#383\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.42...1.43\"\u003ehttps://github.com/jquast/blessed/compare/1.42...1.43\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.42: bugfix regression: cbreak and raw() were not thread-safe\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression in \u003ccode\u003eTerminal.cbreak()\u003c/code\u003e and \u003ccode\u003eraw\u003c/code\u003e were not thread-safe broken in versions 1.40 and 1.41, remove signal ignore of SIGTTOU \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/380\"\u003e#380\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.41...1.42\"\u003ehttps://github.com/jquast/blessed/compare/1.41...1.42\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.41: bugfix get_location() regression\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix get_location() return type in 1.40 release by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/379\"\u003ejquast/blessed#379\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.40...1.41\"\u003ehttps://github.com/jquast/blessed/compare/1.40...1.41\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.40: XTGETTCAP support\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ecurses-free jinxed 2.0 integration by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/374\"\u003ejquast/blessed#374\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eQuery XTGETTCAP on Terminal init by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/375\"\u003ejquast/blessed#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.39...1.40\"\u003ehttps://github.com/jquast/blessed/compare/1.39...1.40\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.17.9: Initial support for Python 3.10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: Now imports on 3.10+\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.15.0: Disable various integration tests, support python 3.7\u003c/h2\u003e\n\u003cp\u003eNo release notes provided.\u003c/p\u003e\n\u003ch2\u003e1.14.0: bugfix term.wrap for text containing newlines\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: term.wrap misbehaved for text containing newlines, \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/74\"\u003e#74\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.13.0: new Terminal.split_seqs() function, speed enhancement\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eenhancement: method \u003ccode\u003eTerminal.split_seqs\u003c/code\u003e introduced, and 4x cost reduction in related sequence-aware functions, \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/29\"\u003e#29\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003edeprecated: function \u003ccode\u003eblessed.sequences.measure_length\u003c/code\u003e superseded by \u003ccode\u003eblessed.sequences.iter_parse\u003c/code\u003e if necessary.\u003c/li\u003e\n\u003cli\u003edeprecated: warnings about \u0026quot;binary-packed capabilities\u0026quot; are no longer emitted on strange terminal types, making best effort.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.12.0: add Terminal.get_location() method\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eenhancement: method Terminal.get_location\u003ccode\u003ereturns the\u003c/code\u003e(row, col)`` position of the cursor at the time of call for attached terminal.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jquast/blessed/blob/master/docs/history.rst\"\u003eblessed's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. py:currentmodule:: blessed.terminal\u003c/p\u003e\n\u003ch1\u003eVersion History\u003c/h1\u003e\n\u003cp\u003e1.47\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~Terminal.does_sixel\u003c/code\u003e now returns \u003ccode\u003eTrue\u003c/code\u003e for SyncTERM using special-case\nmatching of its illegal DA1 response.\u003c/li\u003e\n\u003cli\u003ebugfix: legacy SGR mouse decoder reported no-button motion event (mode 1003) as \u003ccode\u003eLEFT_MOTION\u003c/code\u003e\ninstead of \u003ccode\u003eMOTION\u003c/code\u003e, :ghpull:\u003ccode\u003e398\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ebugfix: match keyboard input \u003ccode\u003e\\x1b\\n\u003c/code\u003e as \u003ccode\u003eKEY_ALT_ENTER\u003c/code\u003e instead of \u003ccode\u003eKEY_CTRL_ALT_J\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.46\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~Terminal.does_sixel\u003c/code\u003e failed to detect DA1 and caused the response to \u0026quot;leak\u0026quot; into\nnext call to :meth:\u003ccode\u003e~Terminal.inkey\u003c/code\u003e for some terminals of unmatched patterns (e.g., kitty).\u003c/li\u003e\n\u003cli\u003eimprove: add new sugar for extended cap-defined styles, like 'clear_scrollback' (common),\n'strikethrough', and 'overline' (not common).\u003c/li\u003e\n\u003cli\u003eimprove: Truecolor support by unique TERM, improves remote sessions like SSH that do not forward\n\u003ccode\u003eCOLORTERM\u003c/code\u003e, and, for the few terminals that do not respond to XTGETTCAP request for \u003ccode\u003eRGB\u003c/code\u003e:\n(kitty).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.45\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: name consistency of kitty keyboard modifiers :ghpull:\u003ccode\u003e390\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.44\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eimprove: reduce errant XTGETTCAP output for Terminal.app and ConEmu.exe :ghpull:\u003ccode\u003e385\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.43\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression of XTGETTCAP responses leaking into first call for empty/non-response\nterminals (libvte/Gnome Terminal), in versions 1.40 to 1.42 :ghpull:\u003ccode\u003e383\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.42\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression in :meth:\u003ccode\u003e~.Terminal.cbreak\u003c/code\u003e and :meth:\u003ccode\u003e~.Terminal.raw\u003c/code\u003e were not thread-safe\nbroken in versions 1.40 and 1.41, remove signal ignore of SIGTTOU :ghissue:\u003ccode\u003e380\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.41\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~.Terminal.get_location\u003c/code\u003e broken in 1.40, returned a generator instead of a tuple.\n:ghissue:\u003ccode\u003e378\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.40\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eimproved: jinxed_ is \u003cstrong\u003enow required on all platforms\u003c/strong\u003e, providing a curses-free and\n\u003ccode\u003esingleton-free \u0026lt;https://jinxed.readthedocs.io/en/stable/capabilities.html#singleton-free\u0026gt;\u003c/code\u003e_\nimplementation of the subset of curses_ used by blessed.  The jinxed_ 1.5.0 release provides a\nterminal \u003ccode\u003ecapability database \u0026lt;https://jinxed.readthedocs.io/en/stable/capabilities.html#database\u0026gt;\u003c/code\u003e of 45 terminals and their\ncommon aliases.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eimproved: Class initialization of :class:\u003ccode\u003e~.Terminal()\u003c/code\u003e now uses \u003ccode\u003eXTGETTCAP\u003c/code\u003e_ to determine\npreferred terminal name \u003ccode\u003eTN\u003c/code\u003e, 24-bit color support \u003ccode\u003eRGB\u003c/code\u003e, number of colors \u003ccode\u003eCo\u003c/code\u003e, \u003ccode\u003eitalic\u003c/code\u003e,\nand \u003ccode\u003eblink\u003c/code\u003e capabilities.\u003c/p\u003e\n\u003cp\u003eThis improves detection of Terminal \u003ccode\u003ekind\u003c/code\u003e and \u003ccode\u003enumber_of_colors\u003c/code\u003e over protocols like serial\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jquast/blessed/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.8 to 1.43.50\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a8ae7f0619b16600dfb006b07c55c3e276cbf21a\"\u003e\u003ccode\u003ea8ae7f0\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.50'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b8c36a990c84df2cdec68b0af03194c619e3e8f1\"\u003e\u003ccode\u003eb8c36a9\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.50\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/fa19980a5c4eee55479fb56b444dc785a6e6b988\"\u003e\u003ccode\u003efa19980\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2ce2fd5ac8a6e5069465b4eface2938a940bc8b2\"\u003e\u003ccode\u003e2ce2fd5\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d2937da5351e7da82f983c2c572ba35615746b62\"\u003e\u003ccode\u003ed2937da\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/159cb6abdba69c6a433ad2b83920e850643a85cc\"\u003e\u003ccode\u003e159cb6a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.49\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2b8f4d84ae0fb264813e0997f3e510d517b4a1ab\"\u003e\u003ccode\u003e2b8f4d8\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/aa40f37ebe773ef7e8aadbeffee37aeaec8a29c2\"\u003e\u003ccode\u003eaa40f37\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.48'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/652b573c3d4853497e60f983ff2938d2c4efbb4e\"\u003e\u003ccode\u003e652b573\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.48' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/13cce5d163edd8e436f51d61c9fde9619c48993b\"\u003e\u003ccode\u003e13cce5d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.48\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.8...1.43.50\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.43.8 to 1.43.50\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/42b0340e335b1f633be78fa7e59832bb37951a68\"\u003e\u003ccode\u003e42b0340\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.50'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/febd30f4a24b77afe9ef211aad0675453d621618\"\u003e\u003ccode\u003efebd30f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.50\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/31af253ee49bea34214380b92e7d0152d5f69fa4\"\u003e\u003ccode\u003e31af253\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e179889d6e2bc604b77b9785735d336612e7108a\"\u003e\u003ccode\u003ee179889\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eceb63d43b437b7e5cc67251c07bdb583ee845bd\"\u003e\u003ccode\u003eeceb63d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3749\"\u003e#3749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eecee80c7891c35f2f60ec00d7c4fa81b5fce388\"\u003e\u003ccode\u003eeecee80\u003c/code\u003e\u003c/a\u003e Bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3745\"\u003e#3745\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7d6402f9d49dfa0a873f07b57b888b8d5158738c\"\u003e\u003ccode\u003e7d6402f\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/10f305e588ce4ebe24dd0c8d8ff0e825782bbd85\"\u003e\u003ccode\u003e10f305e\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/2b632ee6822a4f254a02aae6e37b479ae77b688f\"\u003e\u003ccode\u003e2b632ee\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.49\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7ef2356e4892dfb360bddfb0fba8632ac8a59797\"\u003e\u003ccode\u003e7ef2356\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.8...1.43.50\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.4.22 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django` from 5.2.14 to 6.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/e2a424605ac2e7e6e799496542fb2997207e2f23\"\u003e\u003ccode\u003ee2a4246\u003c/code\u003e\u003c/a\u003e [6.0.x] Bumped version for 6.0.7 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/a5de13f1491f1dbf2bb0ad9b91570524ebbc8acd\"\u003e\u003ccode\u003ea5de13f\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-53878 -- Prevented newlines from being accepted in Dom...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/38dfbd27d7d4f4e6eaa087d7a90f2613fbf55b3a\"\u003e\u003ccode\u003e38dfbd2\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-53877 -- Prevented heap buffer over-read when creating...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/64f9a2b2283fde3ec69fb0dfe441cf0f6f411ba3\"\u003e\u003ccode\u003e64f9a2b\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-48588 -- Prevented caching of responses that set cooki...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c26957a58241037f5849171f35177b95c7ec6660\"\u003e\u003ccode\u003ec26957a\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed flatpages synopsis in docs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/0b60f44b77510c00ca79403560987cfbaf5a0037\"\u003e\u003ccode\u003e0b60f44\u003c/code\u003e\u003c/a\u003e [6.0.x] Added FILE_UPLOAD_DIRECTORY_PERMISSIONS to docs settings index.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/d928e3060b258fcd002c80d80bb40390efc988db\"\u003e\u003ccode\u003ed928e30\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37172\"\u003e#37172\u003c/a\u003e -- Linked to upload handlers section in FILE_UPLOAD_* se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/e18935cc265aa30079b9c2d280e53cfb91679bba\"\u003e\u003ccode\u003ee18935c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37158\"\u003e#37158\u003c/a\u003e -- Reordered the contribution checklist sections.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/490eb9cfb68848b88c91f2b6c75d57e2620c7304\"\u003e\u003ccode\u003e490eb9c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed document referenced in multiple toctrees warning in docs/intern...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/748a9b53c5864f87f4501378d2748199ff0063bb\"\u003e\u003ccode\u003e748a9b5\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed duplicate target name in docs/internals/howto-release-django.txt.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.14...6.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth` from 65.14.3 to 65.18.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-filter` from 25.2 to 26.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst\"\u003edjango-filter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 26.1 (2026-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded testing for Django 6.1.\u003c/p\u003e\n\u003cp\u003eDRF integration will require the upcoming DRF v3.18.\nSee \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded testing against Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/52c3c0f21ef8fe281982ec0e95a3675cd8402214\"\u003e\u003ccode\u003e52c3c0f\u003c/code\u003e\u003c/a\u003e Set date and bump version for 26.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/6a3222aaf83170df0f967423444d5312b99a3d69\"\u003e\u003ccode\u003e6a3222a\u003c/code\u003e\u003c/a\u003e Add testing for Python 3.14.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/aa3bd8e87136d4730f4eb44b3386e52c218bcf66\"\u003e\u003ccode\u003eaa3bd8e\u003c/code\u003e\u003c/a\u003e Added testing against Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/ec717ea11378a4dc003cbe2f77b5211d8815a0b6\"\u003e\u003ccode\u003eec717ea\u003c/code\u003e\u003c/a\u003e Correct Language header in Greek locale file (el) (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1751\"\u003e#1751\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/31b297ca2414218052476ba458c4d1eedc0a0f99\"\u003e\u003ccode\u003e31b297c\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1733\"\u003e#1733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/590c0a3e7d73fafa4fb25df45b53fcc79258d09f\"\u003e\u003ccode\u003e590c0a3\u003c/code\u003e\u003c/a\u003e Fix version range for Django 6.0 (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1731\"\u003e#1731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/6204bc4eb75edf7ba766fc256d72a68fa80c3029\"\u003e\u003ccode\u003e6204bc4\u003c/code\u003e\u003c/a\u003e Added release date for v25.2.\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/carltongibson/django-filter/compare/25.2...26.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-js-asset` from 3.1.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/feincms/django-js-asset/blob/main/CHANGELOG.rst\"\u003edjango-js-asset's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. _changelog:\u003c/p\u003e\n\u003ch1\u003eChange log\u003c/h1\u003e\n\u003cp\u003eNext version\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Fixed ``js_asset.Media`` crashing with an ``AttributeError`` when rendering an\n  asset that only implements Django's plain ``__html__`` contract (neither a\n  ``MediaAsset`` nor one of our ``ImportMap``/``JSON`` types). Such assets now\n  fall back to ``__html__()`` exactly like ``django.forms.Media`` does; the\n  nonce cannot be threaded into an opaque ``__html__`` asset, same as with stock\n  Django.\n- Corrected the docs around Django 6.1 support. Thanks James Bligh!\n- Finally set up a documentation site at Read the Docs for django-js-asset.\n\u003cp\u003e4.0 (2026-06-11)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eThis is a major release. Most code keeps working unchanged and the rendered\nHTML is the same, but \u003cstrong\u003eif you use import maps the upgrade is not automatic\u003c/strong\u003e --\nsee the import-map note at the end.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ejs_asset.Media\u003c/code\u003e, a \u003ccode\u003edjango.forms.Media\u003c/code\u003e subclass with two extra\nabilities. First, it merges every embedded \u003ccode\u003eImportMap\u003c/code\u003e into a single\n\u003ccode\u003e\u0026lt;script type=\u0026quot;importmap\u0026quot;\u0026gt;\u003c/code\u003e rendered before any other script -- this\nreplaces the old global \u003ccode\u003eimportmap\u003c/code\u003e object and works no matter how many\nmedia objects Django combines. Second, it applies a request-scoped CSP nonce\nto the tags it renders. It implements \u003ccode\u003e__add__\u003c/code\u003e \u003cstrong\u003eand\u003c/strong\u003e \u003ccode\u003e__radd__\u003c/code\u003e, so it\nkeeps its type -- and its nonce -- when combined with a plain \u003ccode\u003eforms.Media\u003c/code\u003e\nfrom either side (e.g. while Django collects form and widget media). The nonce\ncan be passed to the constructor (\u003ccode\u003enonce=\u003c/code\u003e), copied onto a clone with\n\u003ccode\u003ewith_nonce()\u003c/code\u003e, or passed to \u003ccode\u003erender(nonce=...)\u003c/code\u003e; \u003ccode\u003erender()\u003c/code\u003e also accepts\n\u003ccode\u003eattrs={\u0026quot;nonce\u0026quot;: ...}\u003c/code\u003e so it plugs straight into Django 6.2's\n\u003ccode\u003e{% csp_nonce_attr %}\u003c/code\u003e tag. \u003ccode\u003eMedia.from_media()\u003c/code\u003e wraps an existing\n\u003ccode\u003eforms.Media\u003c/code\u003e instance (e.g. \u003ccode\u003eform.media\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eJS\u003c/code\u003e and \u003ccode\u003eCSS\u003c/code\u003e now \u003cem\u003eproduce\u003c/em\u003e Django's own \u003ccode\u003eScript\u003c/code\u003e and \u003ccode\u003eStylesheet\u003c/code\u003e\nobjects (backported via \u003ccode\u003ejs_asset._compat\u003c/code\u003e on Django versions that lack\nthem) instead of being standalone dataclasses. They therefore share merge\nbuckets with native Django assets and with bare path strings, so the same\nfile is no longer rendered more than once when \u003ccode\u003ejs_asset\u003c/code\u003e assets, plain\nstrings and Django's auto-wrapped assets meet in \u003ccode\u003eforms.Media.merge()\u003c/code\u003e.\n\u003ccode\u003eisinstance(x, JS)\u003c/code\u003e / \u003ccode\u003eisinstance(x, CSS)\u003c/code\u003e keep working (via a metaclass).\nInline CSS (\u003ccode\u003eCSS(src, inline=True)\u003c/code\u003e) is rendered by a small dedicated\n\u003ccode\u003eInlineStyle\u003c/code\u003e asset. Rendered output is unchanged.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eScript\u003c/code\u003e, \u003ccode\u003eStylesheet\u003c/code\u003e, \u003ccode\u003eMediaAsset\u003c/code\u003e and \u003ccode\u003eInlineStyle\u003c/code\u003e can now be\nimported from \u003ccode\u003ejs_asset\u003c/code\u003e -- prefer these in \u003ccode\u003eisinstance\u003c/code\u003e checks over\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/7c024a3ef83a1c2951f2ab3925e85b81ebbc8bc0\"\u003e\u003ccode\u003e7c024a3\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/59aa7e529ef7052c3c1710e8a673c14c852334f6\"\u003e\u003ccode\u003e59aa7e5\u003c/code\u003e\u003c/a\u003e Fix \u003cstrong\u003ehtml\u003c/strong\u003e objects in Media\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b3c515c793185d96d43124a8239267a535bdd18f\"\u003e\u003ccode\u003eb3c515c\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/8a343389d9500999bd3397a1d1c44cb5ee709a00\"\u003e\u003ccode\u003e8a34338\u003c/code\u003e\u003c/a\u003e Address review comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b7d05eb0f4d7548219b06eb4057fe908c2e85a23\"\u003e\u003ccode\u003eb7d05eb\u003c/code\u003e\u003c/a\u003e Remove the global importmap and update the guidance accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/3213b9bd209527e989c0fb8f552e7941407460cc\"\u003e\u003ccode\u003e3213b9b\u003c/code\u003e\u003c/a\u003e Increase interoperability with Django's own object-based media assets\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/cfe3b529f22bd8dcd1abf193aa4af0f1e96681be\"\u003e\u003ccode\u003ecfe3b52\u003c/code\u003e\u003c/a\u003e Add a Media subclass with import-map merging and CSP nonce support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/6708307bd5e1d5cc18cb58da63e2c6ace07e653c\"\u003e\u003ccode\u003e6708307\u003c/code\u003e\u003c/a\u003e dj62 does not exist yet as a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/9961d4871605432a9923d2a844d51d9efca47c73\"\u003e\u003ccode\u003e9961d48\u003c/code\u003e\u003c/a\u003e Run tests with newer Django and Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/f77abf57e6754612793c9976305f704f61dfceff\"\u003e\u003ccode\u003ef77abf5\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/feincms/django-js-asset/issues/20\"\u003e#20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/feincms/django-js-asset/compare/3.1.2...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-maintenance-mode` from 0.22.0 to 0.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/releases\"\u003edjango-maintenance-mode's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.23.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePython 3.14\u003c/code\u003e and \u003ccode\u003eDjango 6.0\u003c/code\u003e support.\u003c/li\u003e\n\u003cli\u003eAdd scheduled maintenance mode support: \u003ccode\u003eset_maintenance_mode(True, start=..., end=...)\u003c/code\u003e and \u003ccode\u003emanage.py maintenance_mode on --start ... --end ...\u003c/code\u003e (maintenance mode automatically activates/deactivates itself based on the scheduled datetimes). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/64\"\u003e#64\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote for custom state backends consumers: \u003ccode\u003eget_value()\u003c/code\u003e now returns \u003ccode\u003ebool\u003c/code\u003e or \u003ccode\u003edict\u003c/code\u003e (scheduled state), and the state file format is extended accordingly (running \u003ccode\u003emaintenance_mode off\u003c/code\u003e restores the plain bool format).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_STAFF_USER\u003c/code\u003e and \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_SUPERUSER\u003c/code\u003e settings to override the \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_AUTHENTICATED_USER\u003c/code\u003e behavior for staff users and superusers (if \u003ccode\u003eNone\u003c/code\u003e, default, they inherit the \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_AUTHENTICATED_USER\u003c/code\u003e behavior). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/191\"\u003e#191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eMAINTENANCE_MODE_RESPONSE_TYPE\u003c/code\u003e to be the path of a function that receives the request and returns the response type (\u003ccode\u003e\u0026quot;html\u0026quot;\u003c/code\u003e or \u003ccode\u003e\u0026quot;json\u0026quot;\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/204\"\u003e#204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTENANCE_MODE_GET_AUTHENTICATED_USER\u003c/code\u003e setting to support non-session authentication (eg. \u003ccode\u003eJWT\u003c/code\u003e / token authentication with \u003ccode\u003edjango-rest-framework\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/233\"\u003e#233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove middleware position docs. \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/251\"\u003e#251\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/blob/main/CHANGELOG.md\"\u003edjango-maintenance-mode's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/releases/tag/0.23.0\"\u003e0.23.0\u003c/a\u003e - 2026-07-13\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePython 3.14\u003c/code\u003e and \u003ccode\u003eDjango 6.0\u003c/code\u003e support.\u003c/li\u003e\n\u003cli\u003eAdd scheduled maintenance mode support: \u003ccode\u003eset_maintenance_mode(True, start=..., end=...)\u003c/code\u003e and \u003ccode\u003emanage.py maintenance_mode on --start ... --end ...\u003c/code\u003e (maintenance mode automatically activates/deactivates itself based on the scheduled datetimes). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/64\"\u003e#64\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote for custom state backends consumers: \u003ccode\u003eget_value()\u003c/code\u003e now returns \u003ccode\u003ebool\u003c/code\u003e or \u003ccode\u003edict\u003c/code\u003e (scheduled state), and the state file format is extended accordingly (running \u003ccode\u003emaintenance_mode off\u003c/code\u003e restores the plain bool format).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTE...\n\n_Description has been truncated_","html_url":"https://github.com/artursampaio-gc/goproduct/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/artursampaio-gc%2Fgoproduct/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"},{"uuid":"4952175034","node_id":"PR_kwDOPSOV8871B4h8","number":186,"state":"closed","title":"build(deps): bump certifi from 2026.6.17 to 2026.7.22","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-22T18:54:31.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-22T18:54:19.000Z","updated_at":"2026-07-22T18:54:38.000Z","time_to_close":12,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps)","packages":[{"name":"certifi","old_version":"2026.6.17","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"}],"path":null,"ecosystem":"pip"},"body":"Bumps [certifi](https://github.com/certifi/python-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\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi\u0026package-manager=pip\u0026previous-version=2026.6.17\u0026new-version=2026.7.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/th30d4y/OpenLearnX/pull/186","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/th30d4y%2FOpenLearnX/issues/186","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/186/packages"},{"uuid":"4945586489","node_id":"PR_kwDOSftIMc70sZjY","number":80,"state":"open","title":"chore(deps)(deps): bump the python-patch-minor group across 1 directory with 37 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-22T04:55:23.000Z","updated_at":"2026-07-22T04:55:24.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"python-patch-minor","update_count":37,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.31","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"alembic","old_version":"1.18.4","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"pymupdf","old_version":"1.24.10","new_version":"1.28.0","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"pypdf","old_version":"6.13.3","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"openai","old_version":"2.32.0","new_version":"2.46.0","repository_url":"https://github.com/openai/openai-python"},{"name":"google-genai","old_version":"2.10.0","new_version":"2.13.0","repository_url":"https://github.com/googleapis/python-genai"},{"name":"google-cloud-vision","old_version":"3.14.0","new_version":"3.15.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"playwright","old_version":"1.60.0","new_version":"1.61.0","repository_url":"https://github.com/microsoft/playwright-python"},{"name":"ruff","old_version":"0.15.14","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.14.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"httpx2","old_version":"2.4.0","new_version":"2.7.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"pip-audit","old_version":"2.10.0","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"},{"name":"anyio","old_version":"4.13.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"google-api-core","old_version":"2.30.3","new_version":"2.32.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-api-python-client","old_version":"2.196.0","new_version":"2.198.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"google-auth","old_version":"2.53.0","new_version":"2.56.2","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"greenlet","old_version":"3.5.1","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"grpcio-status","old_version":"1.71.2","new_version":"1.82.1"},{"name":"idna","old_version":"3.16","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jiter","old_version":"0.15.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"proto-plus","old_version":"1.28.0","new_version":"1.28.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pypdfium2","old_version":"5.8.0","new_version":"5.12.1","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-patch-minor group with 37 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.139.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.51.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.31` | `0.0.32` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.18.4` | `1.18.5` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.51` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.10` | `1.28.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.3` | `6.14.2` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n| [openai](https://github.com/openai/openai-python) | `2.32.0` | `2.46.0` |\n| [google-genai](https://github.com/googleapis/python-genai) | `2.10.0` | `2.13.0` |\n| [google-cloud-vision](https://github.com/googleapis/google-cloud-python) | `3.14.0` | `3.15.0` |\n| [playwright](https://github.com/microsoft/playwright-python) | `1.60.0` | `1.61.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.22` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.15.2` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.4.0` | `2.7.0` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.10.0` | `2.10.1` |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.2` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [google-api-core](https://github.com/googleapis/google-cloud-python) | `2.30.3` | `2.32.0` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.196.0` | `2.198.0` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.53.0` | `2.56.2` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.1` | `3.5.3` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.82.1` |\n| [grpcio-status](https://grpc.io) | `1.71.2` | `1.82.1` |\n| [idna](https://github.com/kjd/idna) | `3.16` | `3.18` |\n| [jiter](https://github.com/pydantic/jiter) | `0.15.0` | `0.16.0` |\n| [proto-plus](https://github.com/googleapis/google-cloud-python) | `1.28.0` | `1.28.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.47.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.8.0` | `5.12.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.69.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n\n\nUpdates `fastapi` from 0.136.1 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.47.0 to 0.51.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansio implementation by \u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMemoize trusted host checks to avoid re-parsing the client IP per request by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2970\"\u003eKludex/uvicorn#2970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the \u003ccode\u003easgi\u003c/code\u003e scope sub-dict per connection by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2976\"\u003eKludex/uvicorn#2976\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBuild a fresh \u003ccode\u003easgi\u003c/code\u003e scope dict per request by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2977\"\u003eKludex/uvicorn#2977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace click.style with an internal ANSI style helper by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2981\"\u003eKludex/uvicorn#2981\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid copying single-frame WebSocket payloads in websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2983\"\u003eKludex/uvicorn#2983\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecate the legacy websockets implementation and default \u003ccode\u003eauto\u003c/code\u003e to websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2985\"\u003eKludex/uvicorn#2985\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExit with a dedicated code on startup failure and stop the supervisor when a worker can't boot by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3001\"\u003eKludex/uvicorn#3001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip the eager app import in the parent when spawning workers by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3012\"\u003eKludex/uvicorn#3012\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2971\"\u003eKludex/uvicorn#2971\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.1 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3019\"\u003e#3019\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.0 (July 4, 2026)\u003c/h2\u003e\n\u003cp\u003eIf you use WebSockets, note that \u003ccode\u003e--ws auto\u003c/code\u003e now picks the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation. You shouldn't need it, but you can pin \u003ccode\u003e--ws websockets\u003c/code\u003e to get the deprecated legacy one back.\u003c/p\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExit with the dedicated code 3 on any startup failure: app loading, socket bind and lifespan startup errors previously exited with a mix of 0, 1 and 3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop the multiprocess supervisor when a worker exits with code 3 instead of restarting it forever (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefault \u003ccode\u003e--ws auto\u003c/code\u003e to \u003ccode\u003ewebsockets-sansio\u003c/code\u003e when websockets is installed (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip the eager app import in the parent process with \u003ccode\u003e--reload\u003c/code\u003e or \u003ccode\u003e--workers\u003c/code\u003e, fixing a memory regression introduced in 0.47.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBuild a fresh \u003ccode\u003easgi\u003c/code\u003e scope dict per request (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache the \u003ccode\u003easgi\u003c/code\u003e scope sub-dict per connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2976\"\u003e#2976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid copying single-frame WebSocket payloads in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2983\"\u003e#2983\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMemoize trusted host checks in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eclick.style\u003c/code\u003e with an internal ANSI style helper (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2981\"\u003e#2981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate the legacy \u003ccode\u003ewebsockets\u003c/code\u003e implementation; use \u003ccode\u003ewebsockets-sansio\u003c/code\u003e or \u003ccode\u003ewsproto\u003c/code\u003e instead (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.49.0 (June 3, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003ehttptools\u003c/code\u003e minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (reverses the 0.48.0 behavior of ignoring them) (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e4d0b05eb8c6459b7ba27ad13a2c2f4f8d4ece50\"\u003e\u003ccode\u003ee4d0b05\u003c/code\u003e\u003c/a\u003e Version 0.51.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3028\"\u003e#3028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/944e43ddbf715aea7c587f2738cd94c3f9106110\"\u003e\u003ccode\u003e944e43d\u003c/code\u003e\u003c/a\u003e Remove colorama from the standard extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2e787704f2610133059e76d56bbd60f48edd34a3\"\u003e\u003ccode\u003e2e78770\u003c/code\u003e\u003c/a\u003e Restart workers with overlap on SIGHUP for near-zero-downtime reloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a1b570cf577d512bfd396b64d72313233e9c3325\"\u003e\u003ccode\u003ea1b570c\u003c/code\u003e\u003c/a\u003e Version 0.50.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3022\"\u003e#3022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/83c7da7332ac3100171c258071de40d5dde35e13\"\u003e\u003ccode\u003e83c7da7\u003c/code\u003e\u003c/a\u003e Require websockets\u0026gt;=13.0 for the default sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b4d011668a75d02370353f34de6dea59692dcad2\"\u003e\u003ccode\u003eb4d0116\u003c/code\u003e\u003c/a\u003e Version 0.50.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a9151d0e763df2c56da2bfe8c5dcead4fe5a276\"\u003e\u003ccode\u003e2a9151d\u003c/code\u003e\u003c/a\u003e Split comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1bf3ab42e3aba1cf4acd1ef0c29d8ad9a599d333\"\u003e\u003ccode\u003e1bf3ab4\u003c/code\u003e\u003c/a\u003e Cover the excluded-directory branch in \u003ccode\u003eFileFilter\u003c/code\u003e with a direct test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/837b5f960dbe2f03e9f12feb9955ce2217211ad8\"\u003e\u003ccode\u003e837b5f9\u003c/code\u003e\u003c/a\u003e Deflake multiprocess, reload, and signal supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2975\"\u003e#2975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21d2c16fd162ce0e92b5c35f4aadca63a8b12e2d\"\u003e\u003ccode\u003e21d2c16\u003c/code\u003e\u003c/a\u003e Version 0.50.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3013\"\u003e#3013\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.51.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.31 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003eKludex/python-multipart#300\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.18.4 to 1.18.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.5\u003c/h1\u003e\n\u003cp\u003eReleased: June 25, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [commands]\u003c/strong\u003e Added \u003ccode\u003e--splice\u003c/code\u003e support to the \u003ccode\u003emerge()\u003c/code\u003e command. Previously, the\nmerge command would suggest using \u003ccode\u003e--splice\u003c/code\u003e when attempting to merge\nnon-head revisions, but the flag was not actually accepted by the command.\nThe \u003ccode\u003esplice\u003c/code\u003e parameter is now available in both the command-line\ninterface and the \u003ccode\u003ecommand.merge()\u003c/code\u003e function, matching the existing\nsupport in \u003ccode\u003ecommand.revision()\u003c/code\u003e.  Pull request courtesy Kadir Can\nOzden.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1712\"\u003e#1712\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [environment]\u003c/strong\u003e Added \u003ccode\u003eScriptDirectory.get_heads.consider_depends_on\u003c/code\u003e\nparameter to \u003ccode\u003eScriptDirectory.get_heads()\u003c/code\u003e. When set to \u003ccode\u003eTrue\u003c/code\u003e,\nhead revisions that are also a dependency of another revision via\n\u003ccode\u003edepends_on\u003c/code\u003e are excluded from the result, matching the effective\nheads that would be present in the \u003ccode\u003ealembic_version\u003c/code\u003e table after\nrunning all upgrades.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1806\"\u003e#1806\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed rendering of dialect keyword arguments containing\n\u003ccode\u003e~sqlalchemy.schema.Column\u003c/code\u003e objects within sequences, such as\n\u003ccode\u003epostgresql_include\u003c/code\u003e.  These were previously rendered using \u003ccode\u003erepr()\u003c/code\u003e,\nproducing invalid Python in the generated migration scripts.  Column\nobjects within list or tuple values are now correctly rendered as their\nstring column names.  Pull request courtesy Ajay Singh.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1258\"\u003e#1258\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [mysql]\u003c/strong\u003e Implemented type comparison for \u003ccode\u003eENUM\u003c/code\u003e datatypes on MySQL, which\nchecks that the individual enum values are equivalent.  If additional\nentries are on either side, this generates a diff.  Changes of order do not\ngenerate a diff.  Pull request courtesy Furkan Köykıran.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1745\"\u003e#1745\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/779\"\u003e#779\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Fixed bug where the \u003ccode\u003einline_references\u003c/code\u003e parameter of\n\u003ccode\u003eOperations.add_column()\u003c/code\u003e did not include foreign key referential\nactions such as \u003ccode\u003eON DELETE\u003c/code\u003e, \u003ccode\u003eON UPDATE\u003c/code\u003e, \u003ccode\u003eDEFERRABLE\u003c/code\u003e,\n\u003ccode\u003eINITIALLY\u003c/code\u003e, and \u003ccode\u003eMATCH\u003c/code\u003e when rendering the inline \u003ccode\u003eREFERENCES\u003c/code\u003e\nclause.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.49 to 2.0.51\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.51\u003c/h1\u003e\n\u003cp\u003eReleased: June 15, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_orm.subqueryload()\u003c/code\u003e combined with\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e and \u003ccode\u003ePropComparator.and_()\u003c/code\u003e would\nsilently drop the additional filter criteria, causing all related objects\nto be loaded instead of only those matching the filter.  The\n\u003ccode\u003eLoaderCriteriaOption\u003c/code\u003e was being constructed against the base\nentity rather than the effective entity indicated by\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e.  Pull request courtesy Arya Rizky.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13207\"\u003e#13207\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed bug where a failure during \u003ccode\u003etpc_prepare()\u003c/code\u003e within\n\u003ccode\u003e_orm.Session.commit()\u003c/code\u003e for a two-phase session would raise\n\u003ccode\u003eIllegalStateChangeError\u003c/code\u003e instead of the original database\nexception.  The internal \u003ccode\u003e_prepare_impl()\u003c/code\u003e method's error handler\nwas unable to invoke \u003ccode\u003e_orm.SessionTransaction.rollback()\u003c/code\u003e due\nto a state-change guard, preventing proper cleanup and masking the\nunderlying error.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13356\"\u003e#13356\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eengine\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[engine] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003eResult.freeze()\u003c/code\u003e would lose track of ambiguous\ncolumn names present in the original \u003ccode\u003eCursorResult\u003c/code\u003e, causing\nkey-based access on the thawed result to silently return a value instead of\nraising \u003ccode\u003eInvalidRequestError\u003c/code\u003e.  The\n\u003ccode\u003eSimpleResultMetaData\u003c/code\u003e now accepts and propagates ambiguous key\ninformation so that frozen, thawed, and pickled results raise consistently\nfor duplicate column names.  Pull request courtesy Saurabh Kohli.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/9427\"\u003e#9427\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003esql\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[sql] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_sql.StatementLambdaElement\u003c/code\u003e would proxy\nattribute access through the cached \u0026quot;expected\u0026quot; expression rather than the\nresolved expression, causing stale closure-bound parameter values to be\nused when a lambda statement was extended with non-lambda criteria such as\nan additional \u003ccode\u003e.where()\u003c/code\u003e clause.  Courtesy cjc0013.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/10827\"\u003e#10827\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.2 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.24.10 to 1.28.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.28.0\u003c/strong\u003e (2026-06-29)\u003c/p\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4114 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4114\u0026gt;\u003c/code\u003e_: ComboBox choice_values full of empty strings despite PDF having valid choices.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4950 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4950\u0026gt;\u003c/code\u003e_: remove_rotation() raises ValueError on widgets with empty/infinite rects\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e5001 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/5001\u0026gt;\u003c/code\u003e_: Formulae incorrectly rendered as black boxes\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e5033 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/5033\u0026gt;\u003c/code\u003e_: Annot.set_rotation(0) followed by Annot.update() throws AttributeError\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse MuPDF-1.28.0.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.\u003cstrong\u003einit\u003c/strong\u003e(): new arg \u003ccode\u003earchive\u003c/code\u003e to support documents with archives.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.convert_to_pdf(): also generate links.\u003c/li\u003e\n\u003cli\u003eFixed MacOS x64 platform tag - used to be macosx_10_9_x86_64, but we actually\nrequire MacOS 10.15, so platform tag is now macosx_10_15_x86_64.\u003c/li\u003e\n\u003cli\u003eSupport Windows builds with free thread python.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.save() now saves non-PDF documents in PDF format.\u003c/li\u003e\n\u003cli\u003eNew method pymupdf.Document.apply_css().\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e9cdfc9e7fe3260efcc9d28713903f075ab05bce\"\u003e\u003ccode\u003ee9cdfc9\u003c/code\u003e\u003c/a\u003e changes.txt: fix mupdf version number.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/629a3582fd31d352f042c9f444b984d8ed22e449\"\u003e\u003ccode\u003e629a358\u003c/code\u003e\u003c/a\u003e docs/document.rst: add new in 1.28.0 to \u003cstrong\u003einit\u003c/strong\u003e's archive.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/7264f27eecc53dcfe0401d3ba97c10b1aa97669d\"\u003e\u003ccode\u003e7264f27\u003c/code\u003e\u003c/a\u003e README.md: updated example conversion from md to pdf.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/119a0bca69156375494eacff9725bb0221fa9b19\"\u003e\u003ccode\u003e119a0bc\u003c/code\u003e\u003c/a\u003e docs/document.rst: document that save() now also works for non-pdf documents.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5ebfc4c03195b56e5ed62d45c895823354b92af7\"\u003e\u003ccode\u003e5ebfc4c\u003c/code\u003e\u003c/a\u003e setup.py: use mupdf-1.28.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/14d8fac83f51b6659015066d5a57ce72b9209438\"\u003e\u003ccode\u003e14d8fac\u003c/code\u003e\u003c/a\u003e changes.txt: removed bogus \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4423\"\u003e#4423\u003c/a\u003e entry, added \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/5033\"\u003e#5033\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d9616168f3d23779b7289acdb0950544f6795031\"\u003e\u003ccode\u003ed961616\u003c/code\u003e\u003c/a\u003e tests/test_annots.py: added test_5033() for setRect() vs set_rect() bug.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d91bd63304edc6685c9561e923e2fda30d603e9f\"\u003e\u003ccode\u003ed91bd63\u003c/code\u003e\u003c/a\u003e changes.txt: added note about save() and non-pdf documents.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/fd409de6680d9a4532ac07560d724d7dc2833b43\"\u003e\u003ccode\u003efd409de\u003c/code\u003e\u003c/a\u003e .github/workflows/: updated to use mupdf branch 1.28.x.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/04aa7dd994f282b1835ac01784b80bd66ce4b09c\"\u003e\u003ccode\u003e04aa7dd\u003c/code\u003e\u003c/a\u003e Remove old setRect Name\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.10...1.28.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.13.3 to 6.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.14.2, 2026-06-23\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3892\"\u003e#3892\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.1...6.14.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.1, 2026-06-23\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.0...6.14.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.0, 2026-06-22\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApply general limit for requested image size (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3888\"\u003e#3888\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSpeed up recovery when reading broken cross-reference table (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3887\"\u003e#3887\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck whether image is displayed on a given page (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3738\"\u003e#3738\u003c/a\u003e) by \u003ca href=\"https://github.com/andreasntr\"\u003e\u003ccode\u003e@​andreasntr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSeveral fixes by \u003ca href=\"https://github.com/metsw24-max\"\u003e\u003ccode\u003e@​metsw24-max\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.14.2, 2026-06-23\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3892\"\u003e#3892\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.1...6.14.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.1, 2026-06-23\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.0...6.14.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.0, 2026-06-22\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApply general limit for requested image size (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3888\"\u003e#3888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSpeed up recovery when reading broken cross-reference table (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3887\"\u003e#3887\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck whether image is displayed on a given page (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3738\"\u003e#3738\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSeveral fixes\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/2266ee853d1420c8774f6657ce3b8f1502cac713\"\u003e\u003ccode\u003e2266ee8\u003c/code\u003e\u003c/a\u003e REL: 6.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/5a33a46416aa1ae6c025ff90a3cca57631fdafd2\"\u003e\u003ccode\u003e5a33a46\u003c/code\u003e\u003c/a\u003e SEC: Avoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/1ee4e58bea04bfca119c7c2fe29d8167dcddcb81\"\u003e\u003ccode\u003e1ee4e58\u003c/code\u003e\u003c/a\u003e REL: 6.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/ec3b14596186c40caca7cf8ab9b2155203e01b5b\"\u003e\u003ccode\u003eec3b145\u003c/code\u003e\u003c/a\u003e SEC: Detect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/c6cd82e82e4906ff29eeeea0e5b81ae38b00be9c\"\u003e\u003ccode\u003ec6cd82e\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed inline image settings in _read_inline_image (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3889\"\u003e#3889\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/0ae42ba0f683e26c76968529a94905587c181010\"\u003e\u003ccode\u003e0ae42ba\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed page label entries in get_label_from_nums (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3884\"\u003e#3884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/50617b5fae0138a30995eebec169d7e63e3ed797\"\u003e\u003ccode\u003e50617b5\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed Tm operand count in extract_text (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3877\"\u003e#3877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/86e5a82471587570c269194e5220d588b06a1119\"\u003e\u003ccode\u003e86e5a82\u003c/code\u003e\u003c/a\u003e MAINT: Improve readability (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3874\"\u003e#3874\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/83cb25f33f41abcbec59e7866e9530b93b7c1ae3\"\u003e\u003ccode\u003e83cb25f\u003c/code\u003e\u003c/a\u003e DEV: Fix sample files commit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/06588ecb5127fe08045e10fa0f227f231ad259ee\"\u003e\u003ccode\u003e06588ec\u003c/code\u003e\u003c/a\u003e REL: 6.14.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pdfplumber` from 0.11.9 to 0.11.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/releases\"\u003epdfplumber's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.11.10\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/blob/stable/CHANGELOG.md\"\u003epdfplumber's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.11.10] — 2026-06-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7d4f2f582f2d99f9e60ba522fdf7afd2f6d54c62\"\u003e\u003ccode\u003e7d4f2f5\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b2f8f6fd7f7f92b73d2f1f9350b6e7e9d2\"\u003e\u003ccode\u003e1e6de0b\u003c/code\u003e\u003c/a\u003e Upgrade dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/91b2b6cbca6efd8b94cc44f942385b1047f00661\"\u003e\u003ccode\u003e91b2b6c\u003c/code\u003e\u003c/a\u003e Appease linter/coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/98041536932ce85d18a1fba80d9db0686b831d9d\"\u003e\u003ccode\u003e9804153\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ebafd6e9cb81afcfee0e4d79d119d3058490467a\"\u003e\u003ccode\u003eebafd6e\u003c/code\u003e\u003c/a\u003e Update Python versions in setup.py classifiers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/fc2c9a9001415ebf7b7221eb89db4cb7d2f65fc8\"\u003e\u003ccode\u003efc2c9a9\u003c/code\u003e\u003c/a\u003e Fix list of tested Python versions in README \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1355\"\u003e#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff65d4c92b648bf306e3e782e481258b6c6d\"\u003e\u003ccode\u003e07a5ff6\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251230 to 20260107\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ec96f7256dde1ccad940c19bf9eb97ddb98cfae6\"\u003e\u003ccode\u003eec96f72\u003c/code\u003e\u003c/a\u003e Update Makefile\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jsvine/pdfplumber/compare/v0.11.9...v0.11.10\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.32.0 to 2.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.46.0\u003c/h2\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{...\n\n_Description has been truncated_","html_url":"https://github.com/skin306152-star/pearnly-app/pull/80","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/skin306152-star%2Fpearnly-app/issues/80","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/80/packages"},{"uuid":"4923313252","node_id":"PR_kwDOL-Yf2s7zkFYj","number":195,"state":"open","title":"chore(deps): bump certifi from 2026.4.22 to 2026.6.17","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-19T15:43:21.000Z","updated_at":"2026-07-19T15:43:28.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"certifi","old_version":"2026.4.22","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"}],"path":null,"ecosystem":"pip"},"body":"Bumps [certifi](https://github.com/certifi/python-certifi) from 2026.4.22 to 2026.6.17.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi\u0026package-manager=pip\u0026previous-version=2026.4.22\u0026new-version=2026.6.17)](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/grisuno/LazyOwn/pull/195","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/grisuno%2FLazyOwn/issues/195","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/195/packages"},{"uuid":"4908666989","node_id":"PR_kwDOTV049M7y14G3","number":1,"state":"closed","title":"Bump the pip group across 1 directory with 3 updates","user":"dependabot[bot]","labels":["dependencies","python","gitar-approved"],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":"2026-07-17T06:25:48.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-17T06:24:57.000Z","updated_at":"2026-07-17T06:27:33.000Z","time_to_close":51,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip","update_count":3,"packages":[{"name":"certifi","old_version":"2020.6.20","new_version":"2024.7.4","repository_url":"https://github.com/certifi/python-certifi"},{"name":"requests","old_version":"2.24.0","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"urllib3","old_version":"1.25.10","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 3 updates in the /utils directory: [certifi](https://github.com/certifi/python-certifi), [requests](https://github.com/psf/requests) and [urllib3](https://github.com/urllib3/urllib3).\n\nUpdates `certifi` from 2020.6.20 to 2024.7.4\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/bd8153872e9c6fc98f4023df9c2deaffea2fa463\"\u003e\u003ccode\u003ebd81538\u003c/code\u003e\u003c/a\u003e 2024.07.04 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/06a2cbf21f345563dde6c28b60e29d57e9b210b3\"\u003e\u003ccode\u003e06a2cbf\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 6.0.5 to 6.1.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/13bba02b72bac97c432c277158bc04b4d2a6bc23\"\u003e\u003ccode\u003e13bba02\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.1.6 to 4.1.7 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/e8abcd0e62b334c164b95d49fcabdc9ecbca0554\"\u003e\u003ccode\u003ee8abcd0\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.8.14 to 1.9.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/292\"\u003e#292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/124f4adf171e15cd9a91a8b6e0325ecc97be8fe1\"\u003e\u003ccode\u003e124f4ad\u003c/code\u003e\u003c/a\u003e 2024.06.02 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/291\"\u003e#291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/c2196ce5d6ee675b27755a19948480a7823e2c6a\"\u003e\u003ccode\u003ec2196ce\u003c/code\u003e\u003c/a\u003e --- (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/fefdeec7588ff1c05214b85a552afcad5fdb51b2\"\u003e\u003ccode\u003efefdeec\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.1.4 to 4.1.5 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/3c5fb1560b826a7f83f1f9750173ff766492c9cf\"\u003e\u003ccode\u003e3c5fb15\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 4.1.6 to 4.1.7 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/286\"\u003e#286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4a9569a3eb58db8548536fc16c5c5c7af946a5b1\"\u003e\u003ccode\u003e4a9569a\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.1.2 to 4.1.4 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/287\"\u003e#287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/1fc808626a895a916b1e4c2b63abae6c5eafdbe3\"\u003e\u003ccode\u003e1fc8086\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 6.0.4 to 6.0.5 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/288\"\u003e#288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2020.06.20...2024.07.04\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.24.0 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\u003ch2\u003ev2.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\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/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\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.24.0...v2.33.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 1.25.10 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/1.25.10...2.7.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\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/big-main/Mind-Expanding-Books/network/alerts).\n\n\u003c/details\u003e\n\n\u003c!-- This is an auto-generated comment: release notes by coderabbit.ai --\u003e\n\n## Summary by CodeRabbit\n\n* **Chores**\n  * Updated several bundled package versions, including security and networking components.\n  * Retained existing versions for unaffected packages.\n\n\u003c!-- end of auto-generated comment: release notes by coderabbit.ai --\u003e","html_url":"https://github.com/big-main/Mind-Expanding-Books/pull/1","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/big-main%2FMind-Expanding-Books/issues/1","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1/packages"},{"uuid":"4834532079","node_id":"PR_kwDOGsm9Mc7vILNw","number":554,"state":"open","title":"fix(dependabot): bump the uv-non-major group across 1 directory with 3 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-08T05:09:48.000Z","updated_at":"2026-07-08T05:33:59.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(dependabot): bump","group_name":"uv-non-major","update_count":3,"packages":[{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"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.19","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-non-major group with 3 updates in the /xtest directory: [certifi](https://github.com/certifi/python-certifi), [pytest](https://github.com/pytest-dev/pytest) and [ruff](https://github.com/astral-sh/ruff).\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 `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.19\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.19\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\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\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Note that \u003ccode\u003ePYI051\u003c/code\u003e is an opinionated stylistic rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26179\"\u003e#26179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Clarify \u003ccode\u003eUP029\u003c/code\u003e as a Python 2 compatibility rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26243\"\u003e#26243\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish Ruff crates to crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26271\"\u003e#26271\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/MakenRosa\"\u003e\u003ccode\u003e@​MakenRosa\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/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\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/sanjibani\"\u003e\u003ccode\u003e@​sanjibani\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.19\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\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/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.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\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Note that \u003ccode\u003ePYI051\u003c/code\u003e is an opinionated stylistic rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26179\"\u003e#26179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Clarify \u003ccode\u003eUP029\u003c/code\u003e as a Python 2 compatibility rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26243\"\u003e#26243\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish Ruff crates to crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26271\"\u003e#26271\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/MakenRosa\"\u003e\u003ccode\u003e@​MakenRosa\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/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\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/sanjibani\"\u003e\u003ccode\u003e@​sanjibani\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.18\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7f0436561d013b190b2a7ccad6f6ddda749102f9\"\u003e\u003ccode\u003e7f04365\u003c/code\u003e\u003c/a\u003e Bump version to 0.15.19 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26291\"\u003e#26291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a30ba16ebdeb7d3793feb69b343db79599cadd26\"\u003e\u003ccode\u003ea30ba16\u003c/code\u003e\u003c/a\u003e [ty] Infer definite equality comparison results (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26290\"\u003e#26290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/bcd202849101b95a722c834c9f316d5f49ffb5d9\"\u003e\u003ccode\u003ebcd2028\u003c/code\u003e\u003c/a\u003e [ty] Avoid recursion when projecting narrowing constraints (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26276\"\u003e#26276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c0e083eda863d5e3288b579adb3ca45b746f44cf\"\u003e\u003ccode\u003ec0e083e\u003c/code\u003e\u003c/a\u003e [ty] Avoid bypassing lazy constraints for Divergent (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26288\"\u003e#26288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fb135968e1950f6c6d3de9d889041b8fe9d8d386\"\u003e\u003ccode\u003efb13596\u003c/code\u003e\u003c/a\u003e Record configured crates.io packages (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26281\"\u003e#26281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/85da759b6a9aa93ccd8183556f040cf3687990d7\"\u003e\u003ccode\u003e85da759\u003c/code\u003e\u003c/a\u003e [ty] Fix ParamSpec callable signature extraction for callable instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26279\"\u003e#26279\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4c98a818d5f10ad78f5f066042bbe3d4370c955a\"\u003e\u003ccode\u003e4c98a81\u003c/code\u003e\u003c/a\u003e [ty] Make multi-arm TypeOf cycle recovery monotonic (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26275\"\u003e#26275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7b84361eec3b396476c209d9141fedc24490dd85\"\u003e\u003ccode\u003e7b84361\u003c/code\u003e\u003c/a\u003e [ty] Preserve regular kind for callable instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26253\"\u003e#26253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/93c8c59a62238e2e9240dae20b804c4091962adb\"\u003e\u003ccode\u003e93c8c59\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Note that \u003ccode\u003ePYI051\u003c/code\u003e is an opinionated stylistic rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26179\"\u003e#26179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/bc9bb0598ba564bcc224cb90207d9ad8228ad796\"\u003e\u003ccode\u003ebc9bb05\u003c/code\u003e\u003c/a\u003e [ty] Infer types for names bound in match patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25940\"\u003e#25940\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.19\"\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/opentdf/tests/pull/554","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/opentdf%2Ftests/issues/554","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/554/packages"},{"uuid":"4813279223","node_id":"PR_kwDORDrEC87uDnE5","number":220,"state":"closed","title":"chore(deps): bump the python-deps group across 1 directory with 24 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-06T00:22:01.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-05T14:51:49.000Z","updated_at":"2026-07-06T00:22:02.000Z","time_to_close":34212,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-deps","update_count":24,"packages":[{"name":"aiohappyeyeballs","old_version":"2.6.2","new_version":"2.7.1","repository_url":"https://github.com/aio-libs/aiohappyeyeballs"},{"name":"anyio","old_version":"4.14.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"boto3","old_version":"1.43.30","new_version":"1.43.40","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.30","new_version":"1.43.40","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"croniter","old_version":"6.0.0","new_version":"6.2.3","repository_url":"https://github.com/pallets-eco/croniter"},{"name":"google-auth","old_version":"2.55.0","new_version":"2.55.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-resource-manager","old_version":"1.17.0","new_version":"1.18.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"langchain","old_version":"1.3.9","new_version":"1.3.11","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-core","old_version":"1.4.7","new_version":"1.4.8","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-google-genai","old_version":"4.2.5","new_version":"4.2.6","repository_url":"https://github.com/langchain-ai/langchain-google"},{"name":"langgraph","old_version":"1.2.5","new_version":"1.2.7","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.8.16","new_version":"0.9.7","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"msgpack","old_version":"1.2.0","new_version":"1.2.1","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"redis","old_version":"8.0.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"s3transfer","old_version":"0.18.0","new_version":"0.19.0","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.63.0","new_version":"2.64.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"tzlocal","old_version":"5.4","new_version":"5.4.4","repository_url":"https://github.com/regebro/tzlocal"},{"name":"uuid-utils","old_version":"0.16.1","new_version":"0.16.2","repository_url":"https://github.com/aminalaee/uuid-utils"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.50.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.8.1","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"xxhash","old_version":"3.7.0","new_version":"3.8.0","repository_url":"https://github.com/ifduyue/python-xxhash"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-deps group with 24 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohappyeyeballs](https://github.com/aio-libs/aiohappyeyeballs) | `2.6.2` | `2.7.1` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.0` | `4.14.1` |\n| [boto3](https://github.com/boto/boto3) | `1.43.30` | `1.43.40` |\n| [botocore](https://github.com/boto/botocore) | `1.43.30` | `1.43.40` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.6.17` |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [croniter](https://github.com/pallets-eco/croniter) | `6.0.0` | `6.2.3` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.55.0` | `2.55.1` |\n| [google-cloud-resource-manager](https://github.com/googleapis/google-cloud-python) | `1.17.0` | `1.18.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.3.9` | `1.3.11` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.4.7` | `1.4.8` |\n| [langchain-google-genai](https://github.com/langchain-ai/langchain-google) | `4.2.5` | `4.2.6` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.2.5` | `1.2.7` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.8.16` | `0.9.7` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.0` | `1.2.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.0.1` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.18.0` | `0.19.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.63.0` | `2.64.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [tzlocal](https://github.com/regebro/tzlocal) | `5.4` | `5.4.4` |\n| [uuid-utils](https://github.com/aminalaee/uuid-utils) | `0.16.1` | `0.16.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.50.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.8.1` | `0.8.2` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.7.0` | `3.8.0` |\n\n\nUpdates `aiohappyeyeballs` from 2.6.2 to 2.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/releases\"\u003eaiohappyeyeballs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse defaultdict to help with performance (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/239\"\u003e#239\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactoring\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCollapse collect-then-remove pattern in utils helpers (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/227\"\u003e#227\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/0dd3fd16fe394eb8493000dc9b9894fad3ca3190\"\u003e\u003ccode\u003e0dd3fd1\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMerge identical except blocks in _connect_sock cleanup (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/229\"\u003e#229\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/b7c186e3242eb4d6eaf0918857a99c263b3186fb\"\u003e\u003ccode\u003eb7c186e\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSimplify _interleave_addrinfos family grouping (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/226\"\u003e#226\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/fdf6548a5f8b38e45ad7cee8add3c3a7e34e2805\"\u003e\u003ccode\u003efdf6548\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.7.0...v2.7.1\"\u003ev2.7.0...v2.7.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.7.0 (2026-05-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 3.14 support (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/224\"\u003e#224\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/10e7d4341666605de295dd00da716e30002e78c2\"\u003e\u003ccode\u003e10e7d43\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.6.2...v2.7.0\"\u003ev2.6.2...v2.7.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/blob/main/CHANGELOG.md\"\u003eaiohappyeyeballs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003ePerformance improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse defaultdict to help with performance (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactoring\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify _interleave_addrinfos family grouping (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/fdf6548a5f8b38e45ad7cee8add3c3a7e34e2805\"\u003e\u003ccode\u003efdf6548\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCollapse collect-then-remove pattern in utils helpers (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/0dd3fd16fe394eb8493000dc9b9894fad3ca3190\"\u003e\u003ccode\u003e0dd3fd1\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMerge identical except blocks in _connect_sock cleanup (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/b7c186e3242eb4d6eaf0918857a99c263b3186fb\"\u003e\u003ccode\u003eb7c186e\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0 (2026-05-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd python 3.14 support (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/10e7d4341666605de295dd00da716e30002e78c2\"\u003e\u003ccode\u003e10e7d43\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/4dfc926e30eea8d24c1a71602d73c0e9a895c191\"\u003e\u003ccode\u003e4dfc926\u003c/code\u003e\u003c/a\u003e 2.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e perf: use defaultdict to help with performance (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/239\"\u003e#239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/338277badfb25fc38759ce38ab9ea2c20ec1bfff\"\u003e\u003ccode\u003e338277b\u003c/code\u003e\u003c/a\u003e chore: stop tracking .DS_Store files (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/251\"\u003e#251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/16978694944ed7fb5e7b49a173160144ccac45bc\"\u003e\u003ccode\u003e1697869\u003c/code\u003e\u003c/a\u003e ci: add codspeed benchmark suite for addrinfo reordering hot paths (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/d40a848cd2262b435242646fa8e220300bcd6952\"\u003e\u003ccode\u003ed40a848\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump starlette from 1.0.1 to 1.3.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/51d42669b2b94a78c6d4bd059e449b8ef51c6646\"\u003e\u003ccode\u003e51d4266\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump cryptography from 46.0.7 to 48.0.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/243\"\u003e#243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/2df44b3987d3c887a8493ba19259c63588226d6c\"\u003e\u003ccode\u003e2df44b3\u003c/code\u003e\u003c/a\u003e chore(pre-commit.ci): pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/241\"\u003e#241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/3e3cb615f00bfb4d29c30e0c86c897f4de8fb02d\"\u003e\u003ccode\u003e3e3cb61\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.3 to 9.1.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/922dcd79a66d67fdd98a5f9b7587c4f8cda44653\"\u003e\u003ccode\u003e922dcd7\u003c/code\u003e\u003c/a\u003e chore(deps-ci): bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/245\"\u003e#245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/70461c583a8cf3c6fa85b8c48b8e4b576cee8083\"\u003e\u003ccode\u003e70461c5\u003c/code\u003e\u003c/a\u003e ci: drop .github/FUNDING.yml to inherit org-wide config (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/247\"\u003e#247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.6.2...v2.7.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.0 to 4.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/149b9e907618fadf6840a4d3cebad533b0c7d033\"\u003e\u003ccode\u003e149b9e9\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/377518cd1160314f2fdf74f356ae9e848c94a065\"\u003e\u003ccode\u003e377518c\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the github-actions group (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b42a2f5e8e9910d0c57b970f9a747427a9da26f0\"\u003e\u003ccode\u003eb42a2f5\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1185\"\u003e#1185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/3ceb6ffbfa89be715f444550883356fbfbc13154\"\u003e\u003ccode\u003e3ceb6ff\u003c/code\u003e\u003c/a\u003e Allow 0 tokens in a CapacityLimiter instantiated outside an event loop (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1183\"\u003e#1183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/e10d1db74f7a59cb283a1e4b3b22227da11c6f07\"\u003e\u003ccode\u003ee10d1db\u003c/code\u003e\u003c/a\u003e Add missing await to open_file() in file I/O concurrency example (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1182\"\u003e#1182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1dbc3b62256e5877bcf610aca98ba6e450d14c20\"\u003e\u003ccode\u003e1dbc3b6\u003c/code\u003e\u003c/a\u003e OutcomeException should not discard test runner_task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.0...4.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.30 to 1.43.40\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/dd59a59bbd400538f20d03782991907321f3cac7\"\u003e\u003ccode\u003edd59a59\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.40'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b416ca0ee262545bc14dad610825800d0e1afdfe\"\u003e\u003ccode\u003eb416ca0\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.40\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b228d052a91bd2a2b6af120e80877ecffd413ad0\"\u003e\u003ccode\u003eb228d05\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/121db7a5a3e37a6d76a1356bf93646616bd04c5b\"\u003e\u003ccode\u003e121db7a\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/00141f6a0d73fc19d7edb52cb054317a5c71fe43\"\u003e\u003ccode\u003e00141f6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/310317d679150d6c78c9af133dde716a0833bf0b\"\u003e\u003ccode\u003e310317d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/ff7c1cfdabd6fc5cc0869d521e25f6fa19a7582b\"\u003e\u003ccode\u003eff7c1cf\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/805c6837a36f52c0b35235bc12ed9243c91b6e9c\"\u003e\u003ccode\u003e805c683\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS to shared Python SDK and CLI team (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4809\"\u003e#4809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/efcfb6506ce686aa8a09908d835ba2b9731209a5\"\u003e\u003ccode\u003eefcfb65\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.38'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d7aa957044d50c107fcd2ba9049d1f3a9056c473\"\u003e\u003ccode\u003ed7aa957\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.38' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.30...1.43.40\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.43.30 to 1.43.40\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c1894c100916579eef4df96e2b330973b9d715f0\"\u003e\u003ccode\u003ec1894c1\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.40'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/fc560a48e6d6a2342a28e32f0f59668efa347179\"\u003e\u003ccode\u003efc560a4\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.40\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/420c5848eac57be3c4dcc5c9b1f36085de397695\"\u003e\u003ccode\u003e420c584\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e00fad7da41412453284c5db9da30283d581a8e7\"\u003e\u003ccode\u003ee00fad7\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/3f295440320638cc50db35e0f599e98555c80b7a\"\u003e\u003ccode\u003e3f29544\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/db6ca713163f4116d23573937389da352f9953b6\"\u003e\u003ccode\u003edb6ca71\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/97d313f018d34bbf38b68296352aec0bc2441745\"\u003e\u003ccode\u003e97d313f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/bcfbd50cca39b6ed8cebf81ba3ad33eaa69bffc5\"\u003e\u003ccode\u003ebcfbd50\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/0813a0feec54b2f4048dcc163363f0a231272e3b\"\u003e\u003ccode\u003e0813a0f\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/ea9157a08919bdf3daceb2176fabbe83535849f5\"\u003e\u003ccode\u003eea9157a\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS to shared Python SDK and CLI team (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3740\"\u003e#3740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.30...1.43.40\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.5.20 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.05.20...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.1 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `croniter` from 6.0.0 to 6.2.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/croniter/blob/main/CHANGELOG.rst\"\u003ecroniter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.3 (2026-07-02)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix quadratic expansion of comma-separated range lists for a large speed-up on expressions with many ranges. [1d79fc6, [#231](https://github.com/pallets-eco/croniter/issues/231), @alhudz]\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Reject a zero step (e.g. ``5-5/0``) in equal and reversed cron ranges instead of silently accepting it. [ab27767, [#232](https://github.com/pallets-eco/croniter/issues/232), @alhudz]\n- Fix ``expand_from_start_time`` month low-bound off-by-one so stepped month ranges start on the correct month. [f329964, [#235](https://github.com/pallets-eco/croniter/issues/235), @alhudz]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eFix zizmor-reported security findings in GitHub Actions workflows. [ed19f94, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eBump pinned build and CI dependencies via dependabot.\u003c/li\u003e\n\u003cli\u003eUpgrade locked development and build dependencies (\u003ccode\u003euv lock --upgrade\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.2 (2026-03-15)\u003c/h2\u003e\n\u003cp\u003ePackaging\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Switch build backend from ``flit_core`` to ``hatchling`` with pinned dependencies. [4cce160]\n- Add PEP 639 license expression (``license = \u0026amp;quot;MIT\u0026amp;quot;``) to project metadata. [4cce160]\n- Pin all GitHub Actions to SHA hashes across CI workflows. [4cce160]\n- Add dependabot for automated dependency updates. [4cce160]\n- Add zizmor workflow for CI security scanning. [4cce160]\n\n\n6.2.1 (2026-03-15)\n------------------\n\nBugfixes\n~~~~~~~~\n- Fix ``get_prev`` skipping Feb 29 on leap years for day-of-month expressions. [441a0b5, [#203](https://github.com/pallets-eco/croniter/issues/203), @Souls-R]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eLicense :: OSI Approved :: MIT License\u003c/code\u003e classifier. [270cbbc, \u003ca href=\"https://github.com/cdheiser\"\u003e\u003ccode\u003e@​cdheiser\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2026-03-14)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eW\u003c/code\u003e (nearest weekday) in the day-of-month field. [c79d88a]\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eprecision_in_seconds\u003c/code\u003e parameter to \u003ccode\u003ematch()\u003c/code\u003e and \u003ccode\u003ematch_range()\u003c/code\u003e to allow overriding the default matching precision. [7415d1e, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/58\"\u003e#58\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/22b59e05f5ca485c45596b2a9b580fddffbf753f\"\u003e\u003ccode\u003e22b59e0\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/236\"\u003e#236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ab277671adc8e446e8dc7f1e939eabf024b6199e\"\u003e\u003ccode\u003eab27767\u003c/code\u003e\u003c/a\u003e reject zero step in equal and reversed cron ranges (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/232\"\u003e#232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f329964223eeb29e7788b1a9d615b525148fec96\"\u003e\u003ccode\u003ef329964\u003c/code\u003e\u003c/a\u003e fix expand_from_start_time month low bound off-by-one (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/235\"\u003e#235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/9810279c20030954e2f1ed2cf5f1d34b98c6b07f\"\u003e\u003ccode\u003e9810279\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/233\"\u003e#233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/d051aaf6342fbe9c559b9fcd99e6fb6f3bb63cb7\"\u003e\u003ccode\u003ed051aaf\u003c/code\u003e\u003c/a\u003e Bump hatchling from 1.29.0 to 1.30.1 in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/1d79fc6555fb9208e290e0af10194eec638ae01c\"\u003e\u003ccode\u003e1d79fc6\u003c/code\u003e\u003c/a\u003e fix quadratic expansion of comma-separated range lists (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/231\"\u003e#231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ed19f94c472ef665598693a554e6a5555be41f7b\"\u003e\u003ccode\u003eed19f94\u003c/code\u003e\u003c/a\u003e Fix zizmor-reported security findings in GitHub Actions workflows (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/82657c37b873319570fee74c1864cb4d6153f543\"\u003e\u003ccode\u003e82657c3\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/229\"\u003e#229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/8e13827f77358beabf75245ad37d31a581cb6d1e\"\u003e\u003ccode\u003e8e13827\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/228\"\u003e#228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/e55d70bf2288e25c1ddf850fde703d56888772f2\"\u003e\u003ccode\u003ee55d70b\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group across 1 directory (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/croniter/compare/6.0.0...6.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.55.0 to 2.55.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-auth: v2.55.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.55.0...google-auth-v2.55.1\"\u003e2.55.1\u003c/a\u003e (2026-06-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e lower regional access boundary logs from warning to debug. (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17571\"\u003e#17571\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1ef418362c1a69e6bbe6f78741b53dc1f3e7b301\"\u003e1ef4183\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17515\"\u003e#17515\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/900d51fcc122464eb3611589f6f9a9c55a85598f\"\u003e\u003ccode\u003e900d51f\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17543\"\u003e#17543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1ef418362c1a69e6bbe6f78741b53dc1f3e7b301\"\u003e\u003ccode\u003e1ef4183\u003c/code\u003e\u003c/a\u003e fix(auth): lower regional access boundary logs from warning to debug. (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17571\"\u003e#17571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/bd782cf279ae700f56d40702d4ef25ef89e2ff9b\"\u003e\u003ccode\u003ebd782cf\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-bigtable (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17575\"\u003e#17575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/57ebaa3c244a9fa97d3e6db206126c504f4b954f\"\u003e\u003ccode\u003e57ebaa3\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-firestore (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17577\"\u003e#17577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/140d86fe6181a4d6f831df8cdc7d86facf8ebe00\"\u003e\u003ccode\u003e140d86f\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-compute (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17576\"\u003e#17576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/39b252f4effe7e8915efa8796d90fd29f356bf96\"\u003e\u003ccode\u003e39b252f\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-spanner (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17578\"\u003e#17578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/421eebdb31d526a6d5ba27c433cf2803d7619be3\"\u003e\u003ccode\u003e421eebd\u003c/code\u003e\u003c/a\u003e feat: support interactive execution of deferred DataFrames in TableWidget (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/3619b29e10ae04623d101808cb98be5edbb483b4\"\u003e\u003ccode\u003e3619b29\u003c/code\u003e\u003c/a\u003e feat: support gemini-3.x models in loader and update default model to gemini-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17bef417db646c0f9fcd91529cd06b2527ec5e3f\"\u003e\u003ccode\u003e17bef41\u003c/code\u003e\u003c/a\u003e test(bigquery-magics): make table_id parsing check version-agnostic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17562\"\u003e#17562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/e68853162249b7a55f560f9a203d49984665c854\"\u003e\u003ccode\u003ee688531\u003c/code\u003e\u003c/a\u003e bigtable: add ValueBitmaskFilter for data client (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17567\"\u003e#17567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.55.0...google-auth-v2.55.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-resource-manager` from 1.17.0 to 1.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-cloud-resource-manager's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-resource-manager: v1.18.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-resource-manager-v1.17.0...google-cloud-resource-manager-v1.18.0\"\u003e1.18.0\u003c/a\u003e (2026-06-22)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eregenerate google-cloud-[o-r] packages (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17075\"\u003e#17075\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f4bd0182d808ae73c3c6981e6ce3d565f78a6051\"\u003ef4bd018\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/a5ad18cbad0577b79917dfad2242a57dc21432e1\"\u003e\u003ccode\u003ea5ad18c\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17482\"\u003e#17482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f6937b33e31a4c3e884165b582442274a366a995\"\u003e\u003ccode\u003ef6937b3\u003c/code\u003e\u003c/a\u003e chore(main): release google-cloud-bigtable 2.39.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17497\"\u003e#17497\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/172302b809b0ff13267f18b5e7dd24be0dce2f70\"\u003e\u003ccode\u003e172302b\u003c/code\u003e\u003c/a\u003e ci(bigquery-storage): fix \u003ccode\u003ecore_deps_from_source\u003c/code\u003e and \u003ccode\u003eprerelease_deps\u003c/code\u003e by in...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/e7268785c6736c10c1337160b4d8606975062637\"\u003e\u003ccode\u003ee726878\u003c/code\u003e\u003c/a\u003e fix(bigframes): world-readable temp zip in create_cloud_function (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17522\"\u003e#17522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/2f893b1b53e7394655fd204d1f8a138212ad8227\"\u003e\u003ccode\u003e2f893b1\u003c/code\u003e\u003c/a\u003e fix: bump \u003ccode\u003e@​angular/common\u003c/code\u003e, \u003ccode\u003e@​angular/forms\u003c/code\u003e, \u003ccode\u003e@​angular/platform-browser\u003c/code\u003e and \u003ca href=\"https://github.com/ang\"\u003e\u003ccode\u003e@​ang\u003c/code\u003e\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f23063f9182cdec868c16afb80304892850fbe88\"\u003e\u003ccode\u003ef23063f\u003c/code\u003e\u003c/a\u003e fix: bump langsmith from 0.8.0 to 0.8.18 in /packages/bigframes (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17518\"\u003e#17518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/6fc45e3790c5a248dcec4b74799834c7b9219ef0\"\u003e\u003ccode\u003e6fc45e3\u003c/code\u003e\u003c/a\u003e fix: bump undici and \u003ccode\u003e@​angular/build\u003c/code\u003e in /packages/bigframes/bigframes/display/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/36b5b7ebb01030a2d0f10d49fe4827ddc79dde9a\"\u003e\u003ccode\u003e36b5b7e\u003c/code\u003e\u003c/a\u003e fix: bump msgpack from 1.1.1 to 1.2.1 in /packages/bigframes (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17520\"\u003e#17520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/11de93965831311445abacaec2d7baeef21f837d\"\u003e\u003ccode\u003e11de939\u003c/code\u003e\u003c/a\u003e tests: add Python 3.15 pre-release testing (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17517\"\u003e#17517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/025840544f5d4ab6a429d1cd9bdbb256c981aa0d\"\u003e\u003ccode\u003e0258405\u003c/code\u003e\u003c/a\u003e fix(bigquery): close GAPIC storage transport and auth sessions to prevent soc...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-resource-manager-v1.17.0...google-cloud-resource-manager-v1.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain` from 1.3.9 to 1.3.11\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain==1.3.11\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.3.10\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.3.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38377\"\u003e#38377\u003c/a\u003e)\nfix(langchain,openai): only set \u003ccode\u003estrict=True\u003c/code\u003e on tools for OpenAI-compatible models in \u003ccode\u003eProviderStrategy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38370\"\u003e#38370\u003c/a\u003e)\nchore: bump pydantic-settings from 2.12.0 to 2.14.2 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38279\"\u003e#38279\u003c/a\u003e)\nchore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38280\"\u003e#38280\u003c/a\u003e)\nchore: bump langsmith from 0.8.9 to 0.8.18 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38281\"\u003e#38281\u003c/a\u003e)\ndocs(langchain): document summarization prompt contract (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38256\"\u003e#38256\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.3.10\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.3.9\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.3.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38255\"\u003e#38255\u003c/a\u003e)\nchore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38176\"\u003e#38176\u003c/a\u003e)\nchore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38179\"\u003e#38179\u003c/a\u003e)\nfix(langchain): switch summary format (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38171\"\u003e#38171\u003c/a\u003e)\nfix(langchain): detect provider strategy for dated \u003ccode\u003egpt-5.2\u003c/code\u003e/\u003ccode\u003egpt-5.4\u003c/code\u003e snapshots (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38222\"\u003e#38222\u003c/a\u003e)\nchore(langchain): improve typing in tests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38163\"\u003e#38163\u003c/a\u003e)\nchore: bump pyjwt from 2.12.0 to 2.13.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38168\"\u003e#38168\u003c/a\u003e)\nrelease(openai): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38130\"\u003e#38130\u003c/a\u003e)\nhotfix(openai): switch version (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38123\"\u003e#38123\u003c/a\u003e)\nrelease(openai): 1.4.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38120\"\u003e#38120\u003c/a\u003e)\ndocs: refresh \u003ccode\u003eREADME\u003c/code\u003e installation and resources (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38119\"\u003e#38119\u003c/a\u003e)\ntest(core,langchain): update tests for explicit deserialization allowlists (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38118\"\u003e#38118\u003c/a\u003e)\nrelease(core): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38111\"\u003e#38111\u003c/a\u003e)\nrelease(anthropic): 1.4.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38105\"\u003e#38105\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/83e824922ac9bf3bf882347fecabd09614bccc37\"\u003e\u003ccode\u003e83e8249\u003c/code\u003e\u003c/a\u003e release(langchain): 1.3.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38377\"\u003e#38377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/6dd45c90f6c7e17dc9f1cd0c17035375fe655b1f\"\u003e\u003ccode\u003e6dd45c9\u003c/code\u003e\u003c/a\u003e hotfix(anthropic): regenerate cassette (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38376\"\u003e#38376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/4a837567c894363a729bae39a1b2bbe68cb89c41\"\u003e\u003ccode\u003e4a83756\u003c/code\u003e\u003c/a\u003e release(openai): 1.3.3 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38375\"\u003e#38375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/792c1a743e4471990e96e818957b3299517e7255\"\u003e\u003ccode\u003e792c1a7\u003c/code\u003e\u003c/a\u003e fix(openai): drop response item ids when \u003ccode\u003estore\u003c/code\u003e is false (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38372\"\u003e#38372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9f7e46fd7052960a402a059b2f78ec6248f78527\"\u003e\u003ccode\u003e9f7e46f\u003c/code\u003e\u003c/a\u003e release(anthropic): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38373\"\u003e#38373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9ef324c9abb534b4839bd2a42f4fb36b1ec3f3c3\"\u003e\u003ccode\u003e9ef324c\u003c/code\u003e\u003c/a\u003e fix(langchain,openai): only set \u003ccode\u003estrict=True\u003c/code\u003e on tools for OpenAI-compatible ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/05b5af17dca9a554b40e216554f5020ff05eb378\"\u003e\u003ccode\u003e05b5af1\u003c/code\u003e\u003c/a\u003e chore(infra): update workflow key name (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38367\"\u003e#38367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8e8177487003026f25198068a137270fe369f2d4\"\u003e\u003ccode\u003e8e81774\u003c/code\u003e\u003c/a\u003e test(groq): xfail flaky tool choice test (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38365\"\u003e#38365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/946fbbbead849fc948e50ef726242c47013a43b7\"\u003e\u003ccode\u003e946fbbb\u003c/code\u003e\u003c/a\u003e fix(groq): replace deprecated Groq llama models (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38363\"\u003e#38363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/d11b1fc86369b970a8e6144fdcc4f5923f6e03cd\"\u003e\u003ccode\u003ed11b1fc\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38341\"\u003e#38341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain==1.3.9...langchain==1.3.11\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-core` from 1.4.7 to 1.4.8\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain-core's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-core==1.4.8\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.4.7\u003c/p\u003e\n\u003cp\u003echore: bump jupyter-server from 2.18.0 to 2.20.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38252\"\u003e#38252\u003c/a\u003e)\nchore: bump tornado from 6.5.6 to 6.5.7 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38184\"\u003e#38184\u003c/a\u003e)\nchore: bump bleach from 6.3.0 to 6.4.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38198\"\u003e#38198\u003c/a\u003e)\nrelease(core): 1.4.8 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38254\"\u003e#38254\u003c/a\u003e)\nrefactor(langchain-classic): remove code for Python \u0026lt; 3.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38194\"\u003e#38194\u003c/a\u003e)\nperf(core): memoize \u003ccode\u003eBaseTool.tool_call_schema\u003c/code\u003e subset model and cache \u003ccode\u003emodel_json_schema\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38073\"\u003e#38073\u003c/a\u003e)\nstyle(core): fix style in \u003ccode\u003elangchain_core\u003c/code\u003e/\u003ccode\u003e_security\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38189\"\u003e#38189\u003c/a\u003e)\nfix(core): preserve usage token details in v3 streaming events (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38021\"\u003e#38021\u003c/a\u003e)\nfix(core): \u003ccode\u003edisallow_any_generics\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38156\"\u003e#38156\u003c/a\u003e)\nchore(core): add mypy \u003ccode\u003ewarn_unreachable\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38109\"\u003e#38109\u003c/a\u003e)\ndocs: refresh \u003ccode\u003eREADME\u003c/code\u003e installation and resources (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38119\"\u003e#38119\u003c/a\u003e)\ntest(core,langchain): update tests for explicit deserialization allowlists (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38118\"\u003e#38118\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/15b0a4930b5306bb2174f16d92fe4b7837147d0a\"\u003e\u003ccode\u003e15b0a49\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.18.0 to 2.20.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38252\"\u003e#38252\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/612139f3af5f55b6311695fe6b139f0b6a6f68a2\"\u003e\u003ccode\u003e612139f\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38175\"\u003e#38175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/921e370a67af4254b948de94c4db4587f4716a84\"\u003e\u003ccode\u003e921e370\u003c/code\u003e\u003c/a\u003e chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38176\"\u003e#38176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/1aabc26836e0c1220121a1f37e3a2691e20f2f19\"\u003e\u003ccode\u003e1aabc26\u003c/code\u003e\u003c/a\u003e chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38179\"\u003e#38179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8d51355f1f81825b72cb55303a39825ecbdc6b44\"\u003e\u003ccode\u003e8d51355\u003c/code\u003e\u003c/a\u003e chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38180\"\u003e#38180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/0b1b7bb77a7e8cf98071e088da777ff52558f771\"\u003e\u003ccode\u003e0b1b7bb\u003c/code\u003e\u003c/a\u003e chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38181\"\u003e#38181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/dfd062742271ad693c8bebe4ff1784cc4f408ade\"\u003e\u003ccode\u003edfd0627\u003c/code\u003e\u003c/a\u003e chore: bump starlette from 1.0.1 to 1.3.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38182\"\u003e#38182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/0269392514c41e44bfa0413c3f550c06e46d2e1e\"\u003e\u003ccode\u003e0269392\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38183\"\u003e#38183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/24d0b3791af52796b3fe5330f38e99b89afda4b1\"\u003e\u003ccode\u003e24d0b37\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38184\"\u003e#38184\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/f368854ec388f0a8e98b9e77aa8da83ebad1b978\"\u003e\u003ccode\u003ef368854\u003c/code\u003e\u003c/a\u003e chore: bump bleach from 6.2.0 to 6.4.0 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38195\"\u003e#38195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-core==1.4.7...langchain-core==1.4.8\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-google-genai` from 4.2.5 to 4.2.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain-google/releases\"\u003elangchain-google-genai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-google-genai==4.2.6\u003c/h2\u003e\n\u003cp\u003eChanges since libs/genai/v4.2.5\u003c/p\u003e\n\u003cp\u003erelease(genai): 4.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1871\"\u003e#1871\u003c/a\u003e)\nfix(genai): propagate generation config fields (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1870\"\u003e#1870\u003c/a\u003e)\nfix(genai): support constructor thinking config (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1869\"\u003e#1869\u003c/a\u003e)\nchore: bump langsmith from 0.8.0 to 0.8.18 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1860\"\u003e#1860\u003c/a\u003e)\ntest(genai,vertexai,community): refresh Gemini model references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1856\"\u003e#1856\u003c/a\u003e)\nchore: bump types-google-cloud-ndb from 2.4.0.20260402 to 2.4.0.20260518 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1778\"\u003e#1778\u003c/a\u003e)\nchore: bump cryptography from 46.0.7 to 48.0.1 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1851\"\u003e#1851\u003c/a\u003e)\nchore: bump the major group across 1 directory with 3 updates (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1810\"\u003e#1810\u003c/a\u003e)\nfeat(genai,vertexai): add package version metadata (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1841\"\u003e#1841\u003c/a\u003e)\nfix(genai): stop docstring cross-refs resolving to wrong class (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1839\"\u003e#1839\u003c/a\u003e)\nchore(genai,vertexai): bump min version of \u003ccode\u003elangchain-core\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1835\"\u003e#1835\u003c/a\u003e)\ntest(genai): make tool-calling integration tests deterministic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1833\"\u003e#1833\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/29780eac5b87e436f38ff11222b4ca37853fbacd\"\u003e\u003ccode\u003e29780ea\u003c/code\u003e\u003c/a\u003e release(genai): 4.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1871\"\u003e#1871\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/d2fb18c811f82cd86fc6b570e7b2b9ee67671ce8\"\u003e\u003ccode\u003ed2fb18c\u003c/code\u003e\u003c/a\u003e fix(genai): propagate generation config fields (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1870\"\u003e#1870\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/3086854c8e88dfc9f7d60d7dfabb9c8a7bc82297\"\u003e\u003ccode\u003e3086854\u003c/code\u003e\u003c/a\u003e fix(genai): support constructor thinking config (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1869\"\u003e#1869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/32b18c6273749b7c9ece2c49b0ee13c13c659948\"\u003e\u003ccode\u003e32b18c6\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1858\"\u003e#1858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/f7d45305b825d08b72a9c42d9914d2fb53af1269\"\u003e\u003ccode\u003ef7d4530\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1860\"\u003e#1860\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/985efce66c0080da9ce6ae37d4c130873f301158\"\u003e\u003ccode\u003e985efce\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/community (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1859\"\u003e#1859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/eeb409fa0bd0ed86f0c885a7a9eae368c77af5d9\"\u003e\u003ccode\u003eeeb409f\u003c/code\u003e\u003c/a\u003e chore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1861\"\u003e#1861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/146a0168e5b75d62eb53db63262a18434b3fbc56\"\u003e\u003ccode\u003e146a016\u003c/code\u003e\u003c/a\u003e fix(vertexai): route labels to request envelope instead of \u003ccode\u003eGenerationConfig\u003c/code\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/bab2961434f405ab9efe64bdcc9065c85f95016f\"\u003e\u003ccode\u003ebab2961\u003c/code\u003e\u003c/a\u003e fix(vertexai): replace removed bison integration test models (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1863\"\u003e#1863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/643f77297ad0d913bcc586d9c09c1a51f2c7805d\"\u003e\u003ccode\u003e643f772\u003c/code\u003e\u003c/a\u003e test(genai,vertexai,community): refresh Gemini model references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1856\"\u003e#1856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain-google/compare/libs/genai/v4.2.5...libs/genai/v4.2.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langgraph` from 1.2.5 to 1.2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langgraph/releases\"\u003elanggraph's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elanggraph==1.2.7\u003c/h2\u003e\n\u003cp\u003eChanges since 1.2.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003erelease(langgraph): 1.2.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8223\"\u003e#8223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): snapshot \u003ccode\u003eDeltaChannel\u003c/code\u003e overwrite supersteps (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8125\"\u003e#8125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): Make \u003ccode\u003eOverwrite\u003c/code\u003e survive JSON roundtrips (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8127\"\u003e#8127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump redis in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7976\"\u003e#7976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8176\"\u003e#8176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump jupyterlab from 4.5.7 to 4.5.9 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8164\"\u003e#8164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): emit valid UUIDs for exit-mode delta task_ids for langgraph-api (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8165\"\u003e#8165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump bleach from 6.3.0 to 6.4.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8107\"\u003e#8107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump cryptography from 46.0.7 to 48.0.1 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8106\"\u003e#8106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump jupyter-server from 2.18.0 to 2.20.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8134\"\u003e#8134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump tornado from 6.5.6 to 6.5.7 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump pyjwt from 2.12.0 to 2.13.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8092\"\u003e#8092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003elanggraph==1.2.6\u003c/h2\u003e\n\u003cp\u003eChanges since 1.2.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003erelease(langgraph): 1.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8139\"\u003e#8139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: nested subgraph inherits parent checkpoint_ns (regression in 1.2.3) (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8053\"\u003e#8053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: cancel running subgraphs on v3 stream abort [closes \u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8029\"\u003e#8029\u003c/a\u003e] (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8057\"\u003e#8057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erelease(cli): 0.4.30 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8101\"\u003e#8101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: standardize package \u003ccode\u003eREADME.md\u003c/code\u003e structure (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8064\"\u003e#8064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump tornado from 6.5.5 to 6.5.6 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8063\"\u003e#8063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/5931a5f0b313feff24e2516a586c55601b868ac1\"\u003e\u003ccode\u003e5931a5f\u003c/code\u003e\u003c/a\u003e release(langgraph): 1.2.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8223\"\u003e#8223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/9a27693c64d3a0d6847dfe1c3d57e301cbf15bbf\"\u003e\u003ccode\u003e9a27693\u003c/code\u003e\u003c/a\u003e fix(langgraph): snapshot \u003ccode\u003eDeltaChannel\u003c/code\u003e overwrite supersteps (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8125\"\u003e#8125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/1b5ca0a1b1e1889879e43536fc5efd0739a3c479\"\u003e\u003ccode\u003e1b5ca0a\u003c/code\u003e\u003c/a\u003e fix(langgraph): Make \u003ccode\u003eOverwrite\u003c/code\u003e survive JSON roundtrips (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8127\"\u003e#8127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/d2f97191abc457954dff23ee1d9342516128ec01\"\u003e\u003ccode\u003ed2f9719\u003c/code\u003e\u003c/a\u003e chore(deps): bump redis in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7976\"\u003e#7976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/c1aad8b46053303c34151e4d05bad1ac0fd17ef5\"\u003e\u003ccode\u003ec1aad8b\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump starlette from 1.0.1 to 1.3.1 in /libs/sdk-py (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8104\"\u003e#8104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/d5dfeaf033227776efdd21e91e5dd200125d623a\"\u003e\u003ccode\u003ed5dfeaf\u003c/code\u003e\u003c/a\u003e chore(deps): bump starlette from 1.0.1 to 1.3.1 in /libs/cli (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8105\"\u003e#8105\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/bdb323efbbecdf9e417f8928471db4d9877bf332\"\u003e\u003ccode\u003ebdb323e\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/checkpoint-sqlite (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/31f69551b7b7f4c30b5ff7f5849e681a6c023be2\"\u003e\u003ccode\u003e31f6955\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/checkpoint-postgres...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/6b767dea5f61acb08a2f0248510201d35991c647\"\u003e\u003ccode\u003e6b767de\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.2 to 0.8.18 in /libs/checkpoint-conforma...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/e6574a854fcb60bb47e9f2ee463e01662a6d1a91\"\u003e\u003ccode\u003ee6574a8\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/cli (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8172\"\u003e#8172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langgraph/compare/1.2.5...1.2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langsmith` from 0.8.16 to 0.9.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langsmith-sdk/releases\"\u003elangsmith's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.9.7\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(integrations): add Google ADK Live voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3115\"\u003elangchain-ai/langsmith-sdk#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): attribute voice traces via ls_integration metadata by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3144\"\u003elangchain-ai/langsmith-sdk#3144\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): set ls_provider/ls_model_name on voice llm runs for cost by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3145\"\u003elangchain-ai/langsmith-sdk#3145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(release): bump version to 0.9.7 by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3153\"\u003elangchain-ai/langsmith-sdk#3153\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.6...v0.9.7\"\u003ehttps://github.com/langchain-ai/langsmith-sdk/compare/v0.9.6...v0.9.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev0.9.6\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(integrations): add Pipecat voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3112\"\u003elangchain-ai/langsmith-sdk#3112\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): add LiveKit voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3113\"\u003elangchain-ai/langsmith-sdk#3113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): add OpenAI Realtime voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3114\"\u003elangchain-ai/langsmith-sdk#3114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(js,python): Adds thread_id to metadata for Claude Agent SDK by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3141\"\u003elangchain-ai/langsmith-sdk#3141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(py): serialize tuple-keyed trace dictionaries by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3116\"\u003elangchain-ai/langsmith-sdk#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(py): guard OTEL span cleanup [closes \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3080\"\u003e#3080\u003c/a\u003e] by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3118\"\u003elangchain-ai/langsmith-sdk#3118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the npm_and_yarn group across 3 directories with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3123\"\u003elangchain-ai/langsmith-sdk#3123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump pnpm/action-setup from 6.0.8 to 6.0.9 in the actions-minor-and-patch group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3131\"\u003elangchain-ai/langsmith-sdk#3131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the actions-major group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3133\"\u003elangchain-ai/langsmith-sdk#3133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump the js-minor-and-patch group in /js with 14 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3132\"\u003elangchain-ai/langsmith-sdk#3132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the py-major group across 1 directory with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3138\"\u003elangchain-ai/langsmith-sdk#3138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the py-minor-and-patch group across 1 directory with 21 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3140\"\u003elangchain-ai/langsmith-sdk#3140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the npm_and_yarn group across 4 directories with 1 update by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3148\"\u003elangchain-ai/langsmith-sdk#3148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): update pydata-sphinx-theme requirement from \u0026gt;=0.18.0 to \u0026gt;=0.19.0 in /python by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3137\"\u003elangchain-ai/langsmith-sdk#3137\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump the js-major group across 1 directory with 7 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3134\"\u003e...\n\n_Description has been truncated_","html_url":"https://github.com/SMSLYCLOUD/smsly-hosting/pull/220","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SMSLYCLOUD%2Fsmsly-hosting/issues/220","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/220/packages"},{"uuid":"4784733916","node_id":"PR_kwDOQ4NGtc7soRxm","number":155,"state":"open","title":"chore(deps): bump certifi from 2025.1.31 to 2026.6.17","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-01T10:37:01.000Z","updated_at":"2026-07-01T10:37:02.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"certifi","old_version":"2025.1.31","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"}],"path":null,"ecosystem":"pip"},"body":"Bumps [certifi](https://github.com/certifi/python-certifi) from 2025.1.31 to 2026.6.17.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2025.01.31...2026.06.17\"\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=certifi\u0026package-manager=pip\u0026previous-version=2025.1.31\u0026new-version=2026.6.17)](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/CSCfi/allas-web-interface/pull/155","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/CSCfi%2Fallas-web-interface/issues/155","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/155/packages"},{"uuid":"4781533945","node_id":"PR_kwDOSZ_5Cs7sd3GP","number":12,"state":"open","title":"deps(backend): bump the backend-minor-and-patch group across 1 directory with 21 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-01T01:12:18.000Z","updated_at":"2026-07-01T01:12:19.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"backend-minor-and-patch","update_count":21,"packages":[{"name":"alembic","old_version":"1.18.4","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"anyio","old_version":"4.13.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.138.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"greenlet","old_version":"3.5.0","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.13","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jiter","old_version":"0.14.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"numpy","old_version":"2.4.4","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"openai","old_version":"2.33.0","new_version":"2.44.0","repository_url":"https://github.com/openai/openai-python"},{"name":"pydantic","old_version":"2.13.3","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.0","new_version":"2.14.2","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pymupdf","old_version":"1.27.2.3","new_version":"1.28.0","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"tiktoken","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/openai/tiktoken"},{"name":"pydantic-core","old_version":"2.46.3","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"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.49","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"starlette","old_version":"1.0.0","new_version":"1.3.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"},{"name":"uvicorn","old_version":"0.46.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"slowapi","old_version":"0.1.9","new_version":"0.1.10","repository_url":"https://github.com/laurents/slowapi"}],"path":null,"ecosystem":"pip"},"body":"Bumps the backend-minor-and-patch group with 21 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.18.4` | `1.18.5` |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.1` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.6.17` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.138.2` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.0` | `3.5.3` |\n| [idna](https://github.com/kjd/idna) | `3.13` | `3.18` |\n| [jiter](https://github.com/pydantic/jiter) | `0.14.0` | `0.16.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.4` | `2.4.6` |\n| [openai](https://github.com/openai/openai-python) | `2.33.0` | `2.44.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.3` | `2.13.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.0` | `2.14.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.27.2.3` | `1.28.0` |\n| [tiktoken](https://github.com/openai/tiktoken) | `0.12.0` | `0.13.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.3` | `2.47.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.49` | `2.0.51` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.0` | `1.3.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.46.0` | `0.49.0` |\n| [slowapi](https://github.com/laurents/slowapi) | `0.1.9` | `0.1.10` |\n\n\nUpdates `alembic` from 1.18.4 to 1.18.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.5\u003c/h1\u003e\n\u003cp\u003eReleased: June 25, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [commands]\u003c/strong\u003e Added \u003ccode\u003e--splice\u003c/code\u003e support to the \u003ccode\u003emerge()\u003c/code\u003e command. Previously, the\nmerge command would suggest using \u003ccode\u003e--splice\u003c/code\u003e when attempting to merge\nnon-head revisions, but the flag was not actually accepted by the command.\nThe \u003ccode\u003esplice\u003c/code\u003e parameter is now available in both the command-line\ninterface and the \u003ccode\u003ecommand.merge()\u003c/code\u003e function, matching the existing\nsupport in \u003ccode\u003ecommand.revision()\u003c/code\u003e.  Pull request courtesy Kadir Can\nOzden.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1712\"\u003e#1712\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [environment]\u003c/strong\u003e Added \u003ccode\u003eScriptDirectory.get_heads.consider_depends_on\u003c/code\u003e\nparameter to \u003ccode\u003eScriptDirectory.get_heads()\u003c/code\u003e. When set to \u003ccode\u003eTrue\u003c/code\u003e,\nhead revisions that are also a dependency of another revision via\n\u003ccode\u003edepends_on\u003c/code\u003e are excluded from the result, matching the effective\nheads that would be present in the \u003ccode\u003ealembic_version\u003c/code\u003e table after\nrunning all upgrades.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1806\"\u003e#1806\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed rendering of dialect keyword arguments containing\n\u003ccode\u003e~sqlalchemy.schema.Column\u003c/code\u003e objects within sequences, such as\n\u003ccode\u003epostgresql_include\u003c/code\u003e.  These were previously rendered using \u003ccode\u003erepr()\u003c/code\u003e,\nproducing invalid Python in the generated migration scripts.  Column\nobjects within list or tuple values are now correctly rendered as their\nstring column names.  Pull request courtesy Ajay Singh.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1258\"\u003e#1258\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [mysql]\u003c/strong\u003e Implemented type comparison for \u003ccode\u003eENUM\u003c/code\u003e datatypes on MySQL, which\nchecks that the individual enum values are equivalent.  If additional\nentries are on either side, this generates a diff.  Changes of order do not\ngenerate a diff.  Pull request courtesy Furkan Köykıran.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1745\"\u003e#1745\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/779\"\u003e#779\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Fixed bug where the \u003ccode\u003einline_references\u003c/code\u003e parameter of\n\u003ccode\u003eOperations.add_column()\u003c/code\u003e did not include foreign key referential\nactions such as \u003ccode\u003eON DELETE\u003c/code\u003e, \u003ccode\u003eON UPDATE\u003c/code\u003e, \u003ccode\u003eDEFERRABLE\u003c/code\u003e,\n\u003ccode\u003eINITIALLY\u003c/code\u003e, and \u003ccode\u003eMATCH\u003c/code\u003e when rendering the inline \u003ccode\u003eREFERENCES\u003c/code\u003e\nclause.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `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 `certifi` from 2026.4.22 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `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\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\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\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 `fastapi` from 0.136.1 to 0.138.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.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/702fea83bb3ef0b558104835d7936af49650fb2d\"\u003e\u003ccode\u003e702fea8\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.138.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15864\"\u003e#15864\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/6466865eec63cb545869d80e2ee6fbc54c4d364e\"\u003e\u003ccode\u003e6466865\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b790e14cb686506df663959ac4879053cfed38db\"\u003e\u003ccode\u003eb790e14\u003c/code\u003e\u003c/a\u003e ♻️ Make \u003ccode\u003eapp.frontend()\u003c/code\u003e return 404 for methods other than \u003ccode\u003eGET\u003c/code\u003e or \u003ccode\u003eHEAD\u003c/code\u003e wi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c2708d981729c96437dcc1d7cfa40cd15128bc60\"\u003e\u003ccode\u003ec2708d9\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/403b1fa16f9519f4b5ab52413daae059479fae4a\"\u003e\u003ccode\u003e403b1fa\u003c/code\u003e\u003c/a\u003e 🔧 Update sponsors: remove Stainless (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15862\"\u003e#15862\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/1929ac23195136e8616ed1b7c3fd84c65b26d234\"\u003e\u003ccode\u003e1929ac2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cba41585675ecb0e119d3ca258821659f07ec3f7\"\u003e\u003ccode\u003ecba4158\u003c/code\u003e\u003c/a\u003e ♻️ Refactor how sponsors data is handled for banners (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15852\"\u003e#15852\u003c/a\u003e)\u003c/li\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.138.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.5.0 to 3.5.3\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.3 (2026-06-26)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix a crash on free-threaded builds when multiple greenlets were\nholding a critical section on an object and the GIL for the thread\nwas dropped. See \u003ccode\u003eissue 513 \u0026lt;https://github.com/python-greenlet/greenlet/issues/513\u0026gt;\u003c/code\u003e_. Thanks\nto ddorian.\u003c/li\u003e\n\u003c/ul\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\u003c/blockquote\u003e\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/6ee8c2c5b92fbf296c10219030d0bd3ab0ea6300\"\u003e\u003ccode\u003e6ee8c2c\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6ec0bbba46fdcbfbf5fe4a37ab744aa3835f05c6\"\u003e\u003ccode\u003e6ec0bbb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/514\"\u003e#514\u003c/a\u003e from python-greenlet/issue513-preserve-crit-section\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c03a7e6932c3b437bdf873acfc66fbaae31f1875\"\u003e\u003ccode\u003ec03a7e6\u003c/code\u003e\u003c/a\u003e Py3.13+: Preserve thread state critical_section to prevent crash on free-thre...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/bc10829b9eb05d35bc0b8a09c8c6e4d54cfccc18\"\u003e\u003ccode\u003ebc10829\u003c/code\u003e\u003c/a\u003e Speed up manylinux test runs by only running the core checks; only start many...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c2db75dca4bafa562ace9553b6e5c17af6b483e4\"\u003e\u003ccode\u003ec2db75d\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.3\u003c/li\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.5.0...3.5.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.13 to 3.18\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.18 (2026-06-02)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen decoding a domain, add a \u003ccode\u003edisplay\u003c/code\u003e argument that will pass\nthrough invalid labels rather than raising an exception.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.17 (2026-05-28)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSubstantial 75% reduction in memory usage through new data\nstructures and some optimization in processing speed.\u003c/li\u003e\n\u003cli\u003eAdded a general 1024-character input length cap to the public\nvalidation, conversion, and codec entry points. This is well above\nany legitimate domain or label and guards against pathological\ninputs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.16 (2026-05-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a command-line interface (\u003ccode\u003epython -m idna\u003c/code\u003e, also available as\nthe \u003ccode\u003eidna\u003c/code\u003e script). Encodes or decodes one or more domains supplied\nas arguments or on standard input, with options to select A-label\nor U-label output and control error handling.\u003c/li\u003e\n\u003cli\u003eRaise the minimum supported Python version to 3.9\u003c/li\u003e\n\u003cli\u003eVarious code quality improvements\u003c/li\u003e\n\u003c/ul\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\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/f39ea903ba49eb5a0b2c6723c9a929b41ed4a0f1\"\u003e\u003ccode\u003ef39ea90\u003c/code\u003e\u003c/a\u003e Release 3.18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/40f4e407bc7452da37c24b0c112dcda9a5b299ba\"\u003e\u003ccode\u003e40f4e40\u003c/code\u003e\u003c/a\u003e Pre-release 3.18rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1a5bf80f2fa40454589e6144efe5f72015ef9d24\"\u003e\u003ccode\u003e1a5bf80\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/253\"\u003e#253\u003c/a\u003e from kjd/lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5bbb26fc86e28c4ee1434ae8ae8db76de4c2a5ac\"\u003e\u003ccode\u003e5bbb26f\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c532bae5270489cef8faf9f6b1eb70cbcb454c6d\"\u003e\u003ccode\u003ec532bae\u003c/code\u003e\u003c/a\u003e Rename decode() lenient= option to display= (issue \u003ca href=\"https://redirect.github.com/kjd/idna/issues/248\"\u003e#248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0b1758ba11952a2e88fd6141ffa620409bff0580\"\u003e\u003ccode\u003e0b1758b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/252\"\u003e#252\u003c/a\u003e from kjd/release-3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f48619c4cea6859b938d560fdd9feb898e678567\"\u003e\u003ccode\u003ef48619c\u003c/code\u003e\u003c/a\u003e Release 3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7421ba8003227f816142ab40178e3a7d204e6847\"\u003e\u003ccode\u003e7421ba8\u003c/code\u003e\u003c/a\u003e Pre-release 3.17rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/22ebb73b164081f209449b50162eb7ce086e96a4\"\u003e\u003ccode\u003e22ebb73\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/251\"\u003e#251\u003c/a\u003e from kjd/structure-optimizations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2a7ac0a58c788d50112a5003af545a83807fb108\"\u003e\u003ccode\u003e2a7ac0a\u003c/code\u003e\u003c/a\u003e Drop redundant parallel-arrays comment from uts46data\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.13...v3.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jiter` from 0.14.0 to 0.16.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/785cf750016150bda7410e95525bd6ed398102c4\"\u003e\u003ccode\u003e785cf75\u003c/code\u003e\u003c/a\u003e release: 0.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/e192631a659bcf251402950b78c5d17a17a9d827\"\u003e\u003ccode\u003ee192631\u003c/code\u003e\u003c/a\u003e Add 'Part of the Pydantic Stack' footer to README (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/c929d0cb4c9f59f9b89d1a0585203924f7a87f3b\"\u003e\u003ccode\u003ec929d0c\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003eserde\u003c/code\u003e Deserializer implementation (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/6d57715e01ec78859c62fc5447073c0b5902de39\"\u003e\u003ccode\u003e6d57715\u003c/code\u003e\u003c/a\u003e Modernize Emscripten CI (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/a3a02cdb056233eb89be77e6c5a11044f07b4d20\"\u003e\u003ccode\u003ea3a02cd\u003c/code\u003e\u003c/a\u003e Bump maturin to v1.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/2fe4246c71c003ddb32c943e3b432925f05f7d3c\"\u003e\u003ccode\u003e2fe4246\u003c/code\u003e\u003c/a\u003e update to PyO3 0.29 (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/1429532d486088de53293b57ad315a501e981e9a\"\u003e\u003ccode\u003e1429532\u003c/code\u003e\u003c/a\u003e Drop support for 3.13t target (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/0bb22aa6b3a4d729e6c7bae74c05a5d0f1f654b0\"\u003e\u003ccode\u003e0bb22aa\u003c/code\u003e\u003c/a\u003e release: 0.15.0 (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/251\"\u003e#251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/0f3e5eb48a5fff16d825f9af2ea7c6748bbdfbb8\"\u003e\u003ccode\u003e0f3e5eb\u003c/code\u003e\u003c/a\u003e expose \u003ccode\u003eknown_number_bytes\u003c/code\u003e and parser methods for bytes -\u0026gt; number (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/jiter/compare/v0.14.0...v0.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.4.4 to 2.4.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.4.6 (May 18, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.4.6 Release Notes\u003c/h1\u003e\n\u003cp\u003eNumPy 2.4.6 is a quick release that fixes a regression discovered in the 2.4.5\nrelease.\u003c/p\u003e\n\u003cp\u003eThis release supports Python versions 3.11-3.14\u003c/p\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eA total of 4 people contributed to this release. People with a \u0026quot;+\u0026quot; by their\nnames contributed a patch for the first time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e!EarlMilktea\u003c/li\u003e\n\u003cli\u003eCharles Harris\u003c/li\u003e\n\u003cli\u003eSebastian Berg\u003c/li\u003e\n\u003cli\u003eWarren Weckesser\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePull requests merged\u003c/h2\u003e\n\u003cp\u003eA total of 4 pull requests were merged for this release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/31444\"\u003e#31444\u003c/a\u003e: MAINT: Prepare 2.4.x for further development\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/31453\"\u003e#31453\u003c/a\u003e: BUG: Fix regression in \u003ccode\u003earr.conj()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/31459\"\u003e#31459\u003c/a\u003e: BUG: \u003ccode\u003enp.linalg.svd(..., hermitian=True)\u003c/code\u003e returns non-unitary...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/31460\"\u003e#31460\u003c/a\u003e: BUG: Don't call INCREF/DECREF on descr in NpyStringAcquireAllocator...\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.4.5 (May 15, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.4.5 Release Notes\u003c/h1\u003e\n\u003cp\u003eNumPy 2.4.5 is a patch release that fixes bugs discovered after the 2.4.4\nrelease, has some typing improvements, and maintains infrastructure.\u003c/p\u003e\n\u003cp\u003eThis release supports Python versions 3.11-3.14\u003c/p\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eA total of 17 people contributed to this release. People with a \u0026quot;+\u0026quot; by their\nnames contributed a patch for the first time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAleksei Nikiforov\u003c/li\u003e\n\u003cli\u003eAnarion Zuo +\u003c/li\u003e\n\u003cli\u003eAnkit Ahlawat\u003c/li\u003e\n\u003cli\u003eBreno Favaretto +\u003c/li\u003e\n\u003cli\u003eCharles Harris\u003c/li\u003e\n\u003cli\u003eIgor Krivenko +\u003c/li\u003e\n\u003cli\u003eIjtihed Kilani +\u003c/li\u003e\n\u003cli\u003eJoren Hammudoglu\u003c/li\u003e\n\u003cli\u003eMaarten Baert +\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/b832a09cf2a169c833dd2371e7c07aa00b293242\"\u003e\u003ccode\u003eb832a09\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31462\"\u003e#31462\u003c/a\u003e from charris/prepare-2.4.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/57cc147d2ceacffc6534642bfbdebb3a80428e1e\"\u003e\u003ccode\u003e57cc147\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.4.6 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/0c72b0b53b6b83c004e434b2c7855e73c000d21e\"\u003e\u003ccode\u003e0c72b0b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31459\"\u003e#31459\u003c/a\u003e from charris/backport-31347\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/9778d26e0475d381ccb7817c3b4dd8cacef2b9eb\"\u003e\u003ccode\u003e9778d26\u003c/code\u003e\u003c/a\u003e BUG: core: Don't call INCREF/DECREF on descr in NpyStringAcquireAllocator. (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/e0e38767d5d0f848ab44befeedcad71e8ef589c7\"\u003e\u003ccode\u003ee0e3876\u003c/code\u003e\u003c/a\u003e BUG: core: Don't call INCREF/DECREF on descr in NpyStringAcquireAllocator. (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/d1bffeb9ec4ec0bf029c94ea35abffa92d5c30f2\"\u003e\u003ccode\u003ed1bffeb\u003c/code\u003e\u003c/a\u003e BUG: \u003ccode\u003enp.linalg.svd(..., hermitian=True)\u003c/code\u003e returns non-unitary \u003ccode\u003evh\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31347\"\u003e#31347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/8d8d7e5a14a1da0bfb0faf609a7a7610c431e6e9\"\u003e\u003ccode\u003e8d8d7e5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31453\"\u003e#31453\u003c/a\u003e from seberg/issue-31452\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/bddaab7ace45f90148d8f2bb6e67daab2d45ec76\"\u003e\u003ccode\u003ebddaab7\u003c/code\u003e\u003c/a\u003e BUG: Fix regression in \u003ccode\u003earr.conj()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/37a1ecca8dff09b2c579a991194ac55b9971f3a7\"\u003e\u003ccode\u003e37a1ecc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31444\"\u003e#31444\u003c/a\u003e from charris/begin-2.4.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/3c0e043217a759a8a948ade158fec14348c3b459\"\u003e\u003ccode\u003e3c0e043\u003c/code\u003e\u003c/a\u003e MAINT: Prepare 2.4.x for further development\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.4.4...v2.4.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.33.0 to 2.44.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.44.0\u003c/h2\u003e\n\u003ch2\u003e2.44.0 (2026-06-24)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.43.0...v2.44.0\"\u003ev2.43.0...v2.44.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e prioritize first auth header (\u003ca href=\"https://github.com/openai/openai-python/commit/797e3362e222ae14e587a4543b76a54d8992d66c\"\u003e797e336\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.43.0\u003c/h2\u003e\n\u003ch2\u003e2.43.0 (2026-06-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.42.0...v2.43.0\"\u003ev2.42.0...v2.43.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/22542358490ef8f31f0d373e17f7b791b3d983ca\"\u003e2254235\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.42.0\u003c/h2\u003e\n\u003ch2\u003e2.42.0 (2026-06-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.41.1...v2.42.0\"\u003ev2.41.1...v2.42.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e admin spend_alerts (\u003ca href=\"https://github.com/openai/openai-python/commit/6134198a488996c4ff6fca4551afd55fb3294fdc\"\u003e6134198\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/f337bf43276c880d2daf09a5d7f9fc9a886c4bf2\"\u003ef337bf4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/7015158c3119acf57af6c20903587cef928530a9\"\u003e7015158\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBuild System\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix release workflow permissions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3389\"\u003e#3389\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a526ee813f085318fe3c6923ac3fa10c1cf56420\"\u003ea526ee8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse CI environment for examples API key (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3394\"\u003e#3394\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d64d811e82aff724397e32d593e50657fee3f905\"\u003ed64d811\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.41.1\u003c/h2\u003e\n\u003ch2\u003e2.41.1 (2026-06-05)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.41.0...v2.41.1\"\u003ev2.41.0...v2.41.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBuild System\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove scheduled release workflow trigger (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3366\"\u003e#3366\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2a91011abc21032db9566b98068afefb5fbb9b24\"\u003e2a91011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.41.0\u003c/h2\u003e\n\u003ch2\u003e2.41.0 (2026-06-03)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.40.0...v2.41.0\"\u003ev2.40.0...v2.41.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/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.44.0 (2026-06-24)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.43.0...v2.44.0\"\u003ev2.43.0...v2.44.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e prioritize first auth header (\u003ca href=\"https://github.com/openai/openai-python/commit/797e3362e222ae14e587a4543b76a54d8992d66c\"\u003e797e336\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.43.0 (2026-06-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.42.0...v2.43.0\"\u003ev2.42.0...v2.43.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/22542358490ef8f31f0d373e17f7b791b3d983ca\"\u003e2254235\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.42.0 (2026-06-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.41.1...v2.42.0\"\u003ev2.41.1...v2.42.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e admin spend_alerts (\u003ca href=\"https://github.com/openai/openai-python/commit/6134198a488996c4ff6fca4551afd55fb3294fdc\"\u003e6134198\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/f337bf43276c880d2daf09a5d7f9fc9a886c4bf2\"\u003ef337bf4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/7015158c3119acf57af6c20903587cef928530a9\"\u003e7015158\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBuild System\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix release workflow permissions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3389\"\u003e#3389\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a526ee813f085318fe3c6923ac3fa10c1cf56420\"\u003ea526ee8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse CI environment for examples API key (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3394\"\u003e#3394\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d64d811e82aff724397e32d593e50657fee3f905\"\u003ed64d811\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.41.1 (2026-06-05)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.41.0...v2.41.1\"\u003ev2.41.0...v2.41.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBuild System\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove scheduled release workflow trigger (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3366\"\u003e#3366\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2a91011abc21032db9566b98068afefb5fbb9b24\"\u003e2a91011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.41.0 (2026-06-03)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.40.0...v2.41.0\"\u003ev2.40.0...v2.41.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e responses.moderation and chat_completions.moderation (\u003ca href=\"https://github.com/openai/openai-python/commit/87e46c25ac9ca8cff407b52ad9fb33e326c059d6\"\u003e87e46c2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.40.0 (2026-06-01)\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/openai/openai-python/commit/6d9262d5c666a1e4d47f63178db907ba3087ac5d\"\u003e\u003ccode\u003e6d9262d\u003c/code\u003e\u003c/a\u003e release: 2.44.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d35627525e192b7a65b556d8a79d22079ccabdf6\"\u003e\u003ccode\u003ed356275\u003c/code\u003e\u003c/a\u003e [codex] Add AWS Bedrock provider authentication (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3398\"\u003e#3398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f47f9a270861ca6a6096e8ea15ef8f3e1fb089b0\"\u003e\u003ccode\u003ef47f9a2\u003c/code\u003e\u003c/a\u003e fix(auth): prioritize first auth header\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/e20b6b82c145091f0d8412a7e4a9bc5900a40462\"\u003e\u003ccode\u003ee20b6b8\u003c/code\u003e\u003c/a\u003e release: 2.43.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/4d354538e8c2618e228c80f1fdc332ee1f70d1f2\"\u003e\u003ccode\u003e4d35453\u003c/code\u003e\u003c/a\u003e feat(api): update OpenAPI spec or Stainless config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/2bba15e71817a75e9b8517e09cb244bc144b50d0\"\u003e\u003ccode\u003e2bba15e\u003c/code\u003e\u003c/a\u003e release: 2.42.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/1ec3e8298982d900d31b486177b5d4cecadcf035\"\u003e\u003ccode\u003e1ec3e82\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/93c2eca17d2d484b95245c849b39f51c6d291478\"\u003e\u003ccode\u003e93c2eca\u003c/code\u003e\u003c/a\u003e feat(api): manual updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b269f88a30fcfbcceea1cc30deb00405db88c5e6\"\u003e\u003ccode\u003eb269f88\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ee821d6b4a59d6b73850640162b6454da434f5f7\"\u003e\u003ccode\u003eee821d6\u003c/code\u003e\u003c/a\u003e feat(api): admin spend_alerts\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.33.0...v2.44.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.3 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\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...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.14.0 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\u003c/blockquote\u003e\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 gro...\n\n_Description has been truncated_","html_url":"https://github.com/khozhaniyazov/opensamga/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/khozhaniyazov%2Fopensamga/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/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":"4761574242","node_id":"PR_kwDORqKQ1c7rdAKc","number":16,"state":"closed","title":"build(deps): bump the python-production group with 86 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-05T03:15:46.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-28T08:18:40.000Z","updated_at":"2026-07-05T03:15:48.000Z","time_to_close":586626,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-production","update_count":86,"packages":[{"name":"altair","old_version":"6.0.0","new_version":"6.2.2","repository_url":"https://github.com/vega/altair"},{"name":"anthropic","old_version":"0.86.0","new_version":"0.112.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"anyio","old_version":"4.12.1","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"attrs","old_version":"25.4.0","new_version":"26.1.0","repository_url":"https://github.com/python-attrs/attrs"},{"name":"cachetools","old_version":"7.0.5","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"docstring-parser","old_version":"0.17.0","new_version":"0.18.0","repository_url":"https://github.com/rr-/docstring_parser"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [altair](https://github.com/vega/altair), [anthropic](https://github.com/anthropics/anthropic-sdk-python), [anyio](https://github.com/agronholm/anyio), [attrs](https://github.com/python-attrs/attrs), [cachetools](https://github.com/tkem/cachetools), [certifi](https://github.com/certifi/python-certifi), [charset-normalizer](https://github.com/jawah/charset_normalizer), [click](https://github.com/pallets/click), [docstring-parser](https://github.com/rr-/docstring_parser), [duckdb](https://github.com/duckdb/duckdb-python), [filelock](https://github.com/tox-dev/py-filelock), [fonttools](https://github.com/fonttools/fonttools), [fsspec](https://github.com/fsspec/filesystem_spec), [gitpython](https://github.com/gitpython-developers/GitPython), [googleapis-common-protos](https://github.com/googleapis/google-cloud-python), [hf-xet](https://github.com/huggingface/xet-core), [holidays](https://github.com/vacanza/holidays), [huggingface-hub](https://github.com/huggingface/huggingface_hub), [idna](https://github.com/kjd/idna), [importlib-metadata](https://github.com/python/importlib_metadata), [importlib-resources](https://github.com/python/importlib_resources), [jiter](https://github.com/pydantic/jiter), [jsonpointer](https://github.com/stefankoegl/python-json-pointer), [langchain-core](https://github.com/langchain-ai/langchain), [langfuse](https://github.com/langfuse/langfuse), [langgraph](https://github.com/langchain-ai/langgraph), [langgraph-checkpoint](https://github.com/langchain-ai/langgraph), [langgraph-prebuilt](https://github.com/langchain-ai/langgraph), [langgraph-sdk](https://github.com/langchain-ai/langgraph), [langsmith](https://github.com/langchain-ai/langsmith-sdk), [markdown-it-py](https://github.com/executablebooks/markdown-it-py), [matplotlib](https://github.com/matplotlib/matplotlib), [mpmath](https://github.com/mpmath/mpmath), [narwhals](https://github.com/narwhals-dev/narwhals), [numpy](https://github.com/numpy/numpy), [openai](https://github.com/openai/openai-python), [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python), [orjson](https://github.com/ijl/orjson), [packaging](https://github.com/pypa/packaging), [pandas](https://github.com/pandas-dev/pandas), [pillow](https://github.com/python-pillow/Pillow), [protobuf](https://github.com/protocolbuffers/protobuf), [pyarrow](https://github.com/apache/arrow), [pydantic](https://github.com/pydantic/pydantic), [pydantic-core](https://github.com/pydantic/pydantic), [pydeck](https://github.com/visgl/deck.gl), [pygments](https://github.com/pygments/pygments), [pytest](https://github.com/pytest-dev/pytest), [pytz](https://github.com/stub42/pytz), [regex](https://github.com/mrabarnett/mrab-regex), [requests](https://github.com/psf/requests), [rich](https://github.com/Textualize/rich), [rpds-py](https://github.com/crate-py/rpds), [safetensors](https://github.com/huggingface/safetensors), [scikit-learn](https://github.com/scikit-learn/scikit-learn), [scipy](https://github.com/scipy/scipy), [sentence-transformers](https://github.com/huggingface/sentence-transformers), [streamlit](https://github.com/streamlit/streamlit), [tokenizers](https://github.com/huggingface/tokenizers), [torch](https://github.com/pytorch/pytorch), [tornado](https://github.com/tornadoweb/tornado), [tqdm](https://github.com/tqdm/tqdm), [transformers](https://github.com/huggingface/transformers), [typer](https://github.com/fastapi/typer), [tzdata](https://github.com/python/tzdata), [urllib3](https://github.com/urllib3/urllib3), [uuid-utils](https://github.com/aminalaee/uuid-utils), [wrapt](https://github.com/GrahamDumpleton/wrapt), [xxhash](https://github.com/ifduyue/python-xxhash), [zipp](https://github.com/jaraco/zipp), [fastapi](https://github.com/fastapi/fastapi), [python-multipart](https://github.com/Kludex/python-multipart), [sentry-sdk](https://github.com/getsentry/sentry-python), [resend](https://github.com/resendlabs/resend-python), [uvicorn](https://github.com/Kludex/uvicorn), [sse-starlette](https://github.com/sysid/sse-starlette), [python-jose](https://github.com/mpdavis/python-jose), [email-validator](https://github.com/JoshData/python-email-validator), [langgraph-checkpoint-sqlite](https://github.com/langchain-ai/langgraph), [openpyxl](https://openpyxl.readthedocs.io) and [redis](https://github.com/redis/redis-py) to permit the latest version.\nUpdates `altair` from 6.0.0 to 6.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vega/altair/releases\"\u003ealtair's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.2.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: Avoid layered concat view name collisions by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4066\"\u003evega/altair#4066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Include layered concat views in selection params by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4069\"\u003evega/altair#4069\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocs: Add an Andrews curves example to the gallery by \u003ca href=\"https://github.com/kyo5uke\"\u003e\u003ccode\u003e@​kyo5uke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4049\"\u003evega/altair#4049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Add an interactive bin-size example to the gallery by \u003ca href=\"https://github.com/kyo5uke\"\u003e\u003ccode\u003e@​kyo5uke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4050\"\u003evega/altair#4050\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Validate docs publish clone by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4064\"\u003evega/altair#4064\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix broken example and sync with VL by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4010\"\u003evega/altair#4010\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eci: Make warning for doc preview page more prominent by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4048\"\u003evega/altair#4048\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Check uv lockfile by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4052\"\u003evega/altair#4052\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Run docs build only for docs-related changes and don't duplicate builds on PRs by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4053\"\u003evega/altair#4053\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Update dependencies from dependabot alerts by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4055\"\u003evega/altair#4055\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Upload docs build artifact for PR preview by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4056\"\u003evega/altair#4056\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Reduce dependabot PRs by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4028\"\u003evega/altair#4028\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Correctly resolve docbuild worflow number from PR number by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4060\"\u003evega/altair#4060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Group major GitHub Actions updates by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4061\"\u003evega/altair#4061\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Rename docbuild job from 'build' to 'docbuild' by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4062\"\u003evega/altair#4062\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Schedule release drafts twice monthly by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4057\"\u003evega/altair#4057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Publish official docs after release is published by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4054\"\u003evega/altair#4054\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Document how local versioning works and add base tag by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4051\"\u003evega/altair#4051\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Disambiguate workflow naming by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4063\"\u003evega/altair#4063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: enable partial Python 3.14t coverage by \u003ca href=\"https://github.com/axelray-dev\"\u003e\u003ccode\u003e@​axelray-dev\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4038\"\u003evega/altair#4038\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/kyo5uke\"\u003e\u003ccode\u003e@​kyo5uke\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4049\"\u003evega/altair#4049\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vega/altair/compare/v6.2.1...v6.2.2\"\u003ehttps://github.com/vega/altair/compare/v6.2.1...v6.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.2.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: Write dataset cache files atomically by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4034\"\u003evega/altair#4034\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eci: Prevent uv from dirtying worktree during publish by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4045\"\u003evega/altair#4045\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Clarify release review instructions by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4046\"\u003evega/altair#4046\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vega/altair/compare/v6.2.0...v6.2.1\"\u003ehttps://github.com/vega/altair/compare/v6.2.0...v6.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.2.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThis is the first release in an effort to have smaller, more frequent releases going forward. By making the release process more convenient, we aim to more quickly push out fixes and features that already landed on the main branch to a released version of Altair.\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/vega/altair/commit/a9765713566095349cb1cfbbe85d6ad258c84245\"\u003e\u003ccode\u003ea976571\u003c/code\u003e\u003c/a\u003e fix: Include layered concat views in selection params (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4069\"\u003e#4069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/432157b2304e0e30d89167ab26d1f7987f615a31\"\u003e\u003ccode\u003e432157b\u003c/code\u003e\u003c/a\u003e fix: Avoid layered concat view name collisions (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4066\"\u003e#4066\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/b875b95a24ee20f8e5665a730ee6d80cb6d55348\"\u003e\u003ccode\u003eb875b95\u003c/code\u003e\u003c/a\u003e docs: Fix a broken example and sync another one with VL (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4010\"\u003e#4010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/7b289f9adf07d960f94620ef02c33b8f400f4948\"\u003e\u003ccode\u003e7b289f9\u003c/code\u003e\u003c/a\u003e ci: Enable partial Python 3.14t coverage (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4038\"\u003e#4038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/105ff2b4957651bf4cf55e4e2586705fa02ddfe7\"\u003e\u003ccode\u003e105ff2b\u003c/code\u003e\u003c/a\u003e docs: Validate docs publish clone (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4064\"\u003e#4064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/c82dd2e4af3bcd06ee4909cc38135d1b7f92c3dd\"\u003e\u003ccode\u003ec82dd2e\u003c/code\u003e\u003c/a\u003e ci: Disambiguate workflow naming (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4063\"\u003e#4063\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/624bee9705b345961c9b225d39562a10068461af\"\u003e\u003ccode\u003e624bee9\u003c/code\u003e\u003c/a\u003e docs: Add an interactive bin-size example to the gallery (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4050\"\u003e#4050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/3b1acf676a1a61d9df8d1ded2393dfde49587cae\"\u003e\u003ccode\u003e3b1acf6\u003c/code\u003e\u003c/a\u003e docs: Add an Andrews curves example to the gallery (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4049\"\u003e#4049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/edea5f64e7e893315e2050672058f86657b28201\"\u003e\u003ccode\u003eedea5f6\u003c/code\u003e\u003c/a\u003e ci: Document how local versioning works and add base tag (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4051\"\u003e#4051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/f8b4337e1355ca229d1e2e9645e89b6ec1a7a41c\"\u003e\u003ccode\u003ef8b4337\u003c/code\u003e\u003c/a\u003e ci: Publish official docs after release is published (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4054\"\u003e#4054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/vega/altair/compare/v6.0.0...v6.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 0.86.0 to 0.112.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.112.0\u003c/h2\u003e\n\u003ch2\u003e0.112.0 (2026-06-24)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.111.0...v0.112.0\"\u003ev0.111.0...v0.112.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add support for system.message streaming events (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2450d595731f9532080bb94eb8a43c0bd5189659\"\u003e2450d59\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ememory tool:\u003c/strong\u003e create parent directories with the correct permissions (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/135\"\u003e#135\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f2fc2a9e0ad8507e4108e9a6b85d023416c2f14c\"\u003ef2fc2a9\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/5ab533e58ee99bcd2e5071bab91d99caee66aa6a\"\u003e5ab533e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for sending User Profile ID in request headers (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/83319bed74f4414d54e0f4237d70b945ed671008\"\u003e83319be\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.111.0\u003c/h2\u003e\n\u003ch2\u003e0.111.0 (2026-06-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.110.0...v0.111.0\"\u003ev0.110.0...v0.111.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ehelpers:\u003c/strong\u003e tag refusal-fallback middleware requests with fallback-refusal-middleware (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/96\"\u003e#96\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2f8ac789506efc0719b06f1f646c9a98bb25ce7b\"\u003e2f8ac78\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.110.0\u003c/h2\u003e\n\u003ch2\u003e0.110.0 (2026-06-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.109.2...v0.110.0\"\u003ev0.109.2...v0.110.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 new code_execution_20260120 tool (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5e23212dc0883174c879b97ef8e7e33ead4e8da5\"\u003e5e23212\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eappend x-stainless-helper across header merges instead of clobbering (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/105\"\u003e#105\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/922558e2ce52e18863dab27bcc04067068827364\"\u003e922558e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebedrock:\u003c/strong\u003e preserve stream event type (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1682\"\u003e#1682\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b27e3439699174dbc41e34e2d6ef5cb1e2930c18\"\u003eb27e343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ehelpers:\u003c/strong\u003e single source of truth for x-stainless-helper key + closed value vocabulary (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/95\"\u003e#95\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e6f7a56bb624f4c946cb15ba7973fd6fe052e10f\"\u003ee6f7a56\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.109.2\u003c/h2\u003e\n\u003ch2\u003e0.109.2 (2026-06-15)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.109.1...v0.109.2\"\u003ev0.109.1...v0.109.2\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/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.112.0 (2026-06-24)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.111.0...v0.112.0\"\u003ev0.111.0...v0.112.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add support for system.message streaming events (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2450d595731f9532080bb94eb8a43c0bd5189659\"\u003e2450d59\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ememory tool:\u003c/strong\u003e create parent directories with the correct permissions (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/135\"\u003e#135\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f2fc2a9e0ad8507e4108e9a6b85d023416c2f14c\"\u003ef2fc2a9\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/5ab533e58ee99bcd2e5071bab91d99caee66aa6a\"\u003e5ab533e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for sending User Profile ID in request headers (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/83319bed74f4414d54e0f4237d70b945ed671008\"\u003e83319be\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.111.0 (2026-06-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.110.0...v0.111.0\"\u003ev0.110.0...v0.111.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ehelpers:\u003c/strong\u003e tag refusal-fallback middleware requests with fallback-refusal-middleware (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/96\"\u003e#96\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2f8ac789506efc0719b06f1f646c9a98bb25ce7b\"\u003e2f8ac78\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.110.0 (2026-06-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.109.2...v0.110.0\"\u003ev0.109.2...v0.110.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 new code_execution_20260120 tool (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5e23212dc0883174c879b97ef8e7e33ead4e8da5\"\u003e5e23212\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eappend x-stainless-helper across header merges instead of clobbering (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/105\"\u003e#105\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/922558e2ce52e18863dab27bcc04067068827364\"\u003e922558e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebedrock:\u003c/strong\u003e preserve stream event type (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1682\"\u003e#1682\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b27e3439699174dbc41e34e2d6ef5cb1e2930c18\"\u003eb27e343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ehelpers:\u003c/strong\u003e single source of truth for x-stainless-helper key + closed value vocabulary (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/95\"\u003e#95\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e6f7a56bb624f4c946cb15ba7973fd6fe052e10f\"\u003ee6f7a56\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.109.2 (2026-06-15)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.109.1...v0.109.2\"\u003ev0.109.1...v0.109.2\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove retired models from API and SDKs (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d4bcfcc257bd0c97d5e75060bd19c97abddd9f49\"\u003ed4bcfcc\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/c986624e451a640040ac9bdfd87054372456af0b\"\u003e\u003ccode\u003ec986624\u003c/code\u003e\u003c/a\u003e release: 0.112.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e633dff66fb9f14e1711bc20d06ba2b894cdf000\"\u003e\u003ccode\u003ee633dff\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/a28468efa7b9188095ad8b542da2d2b050ed732a\"\u003e\u003ccode\u003ea28468e\u003c/code\u003e\u003c/a\u003e chore(api): add support for sending User Profile ID in request headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/97d3d9b53a07e5e4e2b4107793f228a4898c61f6\"\u003e\u003ccode\u003e97d3d9b\u003c/code\u003e\u003c/a\u003e fix(memory tool): create parent directories with the correct permissions (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/135\"\u003e#135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/0868a68884fc73dc844f92cde5b172ee86f5aa3c\"\u003e\u003ccode\u003e0868a68\u003c/code\u003e\u003c/a\u003e feat(client): add support for system.message streaming events\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5d6fd8d3f46dfffdc7d1579674053c6efe9d6508\"\u003e\u003ccode\u003e5d6fd8d\u003c/code\u003e\u003c/a\u003e release: 0.111.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/9fdf2efcf79c09a086169ea4710ec4b379565453\"\u003e\u003ccode\u003e9fdf2ef\u003c/code\u003e\u003c/a\u003e feat(helpers): tag refusal-fallback middleware requests with fallback-refusal...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/af2b702140d8c53ba841b590b5022053c616c4d7\"\u003e\u003ccode\u003eaf2b702\u003c/code\u003e\u003c/a\u003e release: 0.110.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a10dbaabdf6e0f9dda126c8014465c797f9ff008\"\u003e\u003ccode\u003ea10dbaa\u003c/code\u003e\u003c/a\u003e feat(api): add support for new code_execution_20260120 tool\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/9d49b634b44bd70ae344d1e0574347eda2a8ef10\"\u003e\u003ccode\u003e9d49b63\u003c/code\u003e\u003c/a\u003e fix(helpers): single source of truth for x-stainless-helper key + closed valu...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.86.0...v0.112.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.12.1 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.12.1...4.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `attrs` from 25.4.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-attrs/attrs/releases\"\u003eattrs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.1.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main outward change here only affects people using field transformers, but it should be a nice quality of life improvement!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://kraken.tech\"\u003eKraken Tech\u003c/a\u003e (@\u003ca href=\"https://github.com/kraken-tech\"\u003ekraken-tech\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://ecosyste.ms\"\u003eEcosystems\u003c/a\u003e (@\u003ca href=\"https://github.com/ecosyste-ms\"\u003eecosyste-ms\u003c/a\u003e), \u003ca href=\"https://www.lambdatest.com\"\u003eTestMu AI Open Source Office (Formerly LambdaTest)\u003c/a\u003e (@\u003ca href=\"https://github.com/LambdaTest-Inc\"\u003eLambdaTest-Inc\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://miketheman.dev\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://bmdphd.info/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Celebrity News AG (@\u003ca href=\"https://github.com/celebritynewsag\"\u003ecelebritynewsag\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eBackwards-incompatible Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eField aliases are now resolved \u003cem\u003ebefore\u003c/em\u003e calling \u003ccode\u003efield_transformer\u003c/code\u003e, so transformers receive fully populated \u003ccode\u003eAttribute\u003c/code\u003e objects with usable \u003ccode\u003ealias\u003c/code\u003e values instead of \u003ccode\u003eNone\u003c/code\u003e. The new \u003ccode\u003eAttribute.alias_is_default\u003c/code\u003e flag indicates whether the alias was auto-generated (\u003ccode\u003eTrue\u003c/code\u003e) or explicitly set by the user (\u003ccode\u003eFalse\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1509\"\u003e#1509\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotations for \u003ccode\u003eattrs.validators.optional()\u003c/code\u003e, so it no longer rejects tuples with more than one validator. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eattrs.validators.disabled()\u003c/code\u003e contextmanager can now be nested. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFrozen classes can set \u003ccode\u003eon_setattr=attrs.setters.NO_OP\u003c/code\u003e in addition to \u003ccode\u003eNone\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1515\"\u003e#1515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIt's now possible to pass \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003einstances\u003c/strong\u003e in addition to \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003eclasses\u003c/strong\u003e to \u003ccode\u003eattrs.fields()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/DavidCEllis\"\u003e\u003ccode\u003e@​DavidCEllis\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/finite-state-machine\"\u003e\u003ccode\u003e@​finite-state-machine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/vstinner\"\u003e\u003ccode\u003e@​vstinner\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/attrs\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner python-attrs attrs-26.1.0.tar.gz\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-attrs/attrs/blob/main/CHANGELOG.md\"\u003eattrs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/python-attrs/attrs/tree/26.1.0\"\u003e26.1.0\u003c/a\u003e - 2026-03-19\u003c/h2\u003e\n\u003ch3\u003eBackwards-incompatible Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eField aliases are now resolved \u003cem\u003ebefore\u003c/em\u003e calling \u003ccode\u003efield_transformer\u003c/code\u003e, so transformers receive fully populated \u003ccode\u003eAttribute\u003c/code\u003e objects with usable \u003ccode\u003ealias\u003c/code\u003e values instead of \u003ccode\u003eNone\u003c/code\u003e.\nThe new \u003ccode\u003eAttribute.alias_is_default\u003c/code\u003e flag indicates whether the alias was auto-generated (\u003ccode\u003eTrue\u003c/code\u003e) or explicitly set by the user (\u003ccode\u003eFalse\u003c/code\u003e).\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1509\"\u003e#1509\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotations for \u003ccode\u003eattrs.validators.optional()\u003c/code\u003e, so it no longer rejects tuples with more than one validator.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eattrs.validators.disabled()\u003c/code\u003e contextmanager can now be nested.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFrozen classes can set \u003ccode\u003eon_setattr=attrs.setters.NO_OP\u003c/code\u003e in addition to \u003ccode\u003eNone\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1515\"\u003e#1515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIt's now possible to pass \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003einstances\u003c/strong\u003e in addition to \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003eclasses\u003c/strong\u003e to \u003ccode\u003eattrs.fields()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/7bfc49e9b22d5ba25b6e429524c3d49fee27cb36\"\u003e\u003ccode\u003e7bfc49e\u003c/code\u003e\u003c/a\u003e Prepare 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/31e02869da10824b492c378c1dc87ccc720ee5ad\"\u003e\u003ccode\u003e31e0286\u003c/code\u003e\u003c/a\u003e Update test_validators.py for Python 3.15a7 (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1530\"\u003e#1530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/48b8611c27779811d161200e17de8da24aae7feb\"\u003e\u003ccode\u003e48b8611\u003c/code\u003e\u003c/a\u003e Add instance support to attrs.fields() (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/3a68d4913221abc6f8ad3be50937f7ae49300a98\"\u003e\u003ccode\u003e3a68d49\u003c/code\u003e\u003c/a\u003e dev: document missing git tags failure mode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/a572c3a4c558a8b9b48cf989fcd956ab1a279439\"\u003e\u003ccode\u003ea572c3a\u003c/code\u003e\u003c/a\u003e Allow field(on_setattr=NO_OP) on frozen classes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/af9c510912ce604a94896cc35c27368d5baf6ae6\"\u003e\u003ccode\u003eaf9c510\u003c/code\u003e\u003c/a\u003e Fix validators.disabled() to save/restore state on nesting (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/ab7f8b2f4c0f747d5b1575247ce35e5adaad182e\"\u003e\u003ccode\u003eab7f8b2\u003c/code\u003e\u003c/a\u003e update dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/ce89f5d11feb0805da9ed10bb165238cc959f1bb\"\u003e\u003ccode\u003ece89f5d\u003c/code\u003e\u003c/a\u003e Fix message passing in frozen errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/eccd966d80aff5196efc959316961cfa780439f9\"\u003e\u003ccode\u003eeccd966\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eoptional\u003c/code\u003e validator to accept tuples of len \u0026gt; 1 (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/e92fe52dfe1eb07167e6473724c5a8ada978add0\"\u003e\u003ccode\u003ee92fe52\u003c/code\u003e\u003c/a\u003e policies: tighten screws (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1528\"\u003e#1528\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-attrs/attrs/compare/25.4.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.0.5 to 7.1.4\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst\"\u003ecachetools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev7.1.4 (2026-05-22)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor unit test improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate build environment.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.1.3 (2026-05-18)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor type stub improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate build environment.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.1.2 (2026-05-16)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor type stub improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMinor documentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModernize build environment.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.1.1 (2026-05-03)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eVarious type stub improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.1.0 (2026-05-01)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd type stubs based on the work of the good people at \u003ccode\u003etypeshed \u0026lt;https://github.com/python/typeshed/tree/main/stubs/cachetools/\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate unit tests.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.6 (2026-04-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor code improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate project URLs.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate CI environment.\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/tkem/cachetools/commit/48284d73d0a8834c9c50f8d41bb99e6f93b2dfed\"\u003e\u003ccode\u003e48284d7\u003c/code\u003e\u003c/a\u003e Release v7.1.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/55ea96b88a485fca9effae0f838186274f00897c\"\u003e\u003ccode\u003e55ea96b\u003c/code\u003e\u003c/a\u003e Update build environment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/c5439fe5dc883220b59469e450dbcbf9f4c2e52d\"\u003e\u003ccode\u003ec5439fe\u003c/code\u003e\u003c/a\u003e Add threading tests for lock-only decorators.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/91828fccd629d426157a165d38563614ba06a875\"\u003e\u003ccode\u003e91828fc\u003c/code\u003e\u003c/a\u003e Run threading tests unconditionally with timeout.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/16952edb1eb2d2ced7601e12db722008e5156912\"\u003e\u003ccode\u003e16952ed\u003c/code\u003e\u003c/a\u003e Release v7.1.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/92dd756b93813d1ddfe70893e9c219342a52e19a\"\u003e\u003ccode\u003e92dd756\u003c/code\u003e\u003c/a\u003e Prepare v7.1.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/ced08f52ef792a010b8171715c7842da4e11b9ac\"\u003e\u003ccode\u003eced08f5\u003c/code\u003e\u003c/a\u003e Improve cachetools.func type stubs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/d809d7be5a222effd3663c33baaaee3802972daa\"\u003e\u003ccode\u003ed809d7b\u003c/code\u003e\u003c/a\u003e Update build environment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/c84b5e5be3d33a32d33f0988b524fb86de1e44f2\"\u003e\u003ccode\u003ec84b5e5\u003c/code\u003e\u003c/a\u003e Release v7.1.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/39ad61c1db56600fe903f3c4216996c491e775bf\"\u003e\u003ccode\u003e39ad61c\u003c/code\u003e\u003c/a\u003e Prepare v7.1.2.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.0.5...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.06.17\"\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.6 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\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.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\u003c/blockquote\u003e\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.6...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.3.1 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.1/\"\u003ehttps://pypi.org/project/click/8.4.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-1\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-1\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/32\"\u003ehttps://github.com/pallets/click/milestone/32\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type conversion again. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3458\"\u003e#3458\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3277\"\u003e#3277\u003c/a\u003e # 3466\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion result. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3015\"\u003e#3015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3487\"\u003e#3487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our [Version Support Policy][version] on our website.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\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\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\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `docstring-parser` from 0.17.0 to 0.18.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/rr-/docstring_parser/blob/master/CHANGELOG.md\"\u003edocstring-parser's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e0.18 (2026-04-14)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGeneral: Allow \u003ccode\u003eparse()\u003c/code\u003e to work with missing \u003ccode\u003e__doc__\u003c/code\u003e (thanks to \u003ca href=\"https://github.com/jamesbraza\"\u003e\u003ccode\u003e@​jamesbraza\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Officially support Python 3.14 (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Exclude \u003ccode\u003edocstring_parser.tests\u003c/code\u003e from built wheels (thanks to \u003ca href=\"https://github.com/gvalkov\"\u003e\u003ccode\u003e@​gvalkov\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEpydoc: Add missing attribute parsing, which includes the \u0026quot;\u003ca href=\"https://github.com/ivar\"\u003e\u003ccode\u003e@​ivar\u003c/code\u003e\u003c/a\u003e\u0026quot;, \u0026quot;\u003ca href=\"https://github.com/cvar\"\u003e\u003ccode\u003e@​cvar\u003c/code\u003e\u003c/a\u003e\u0026quot; and \u0026quot;\u003ca href=\"https://github.com/var\"\u003e\u003ccode\u003e@​var\u003c/code\u003e\u003c/a\u003e\u0026quot; syntax (thanks to \u003ca href=\"https://github.com/Masara\"\u003e\u003ccode\u003e@​Masara\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNumpydoc: Add support for defaults in type declarations and improve compose behavior (thanks to \u003ca href=\"https://github.com/jwlodek\"\u003e\u003ccode\u003e@​jwlodek\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.17 (2025-07-21)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGeneral: Replace poetry with hatchling (thanks to \u003ca href=\"https://github.com/LecrisUT\"\u003e\u003ccode\u003e@​LecrisUT\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Drop support for Python 3.6 and 3.7 (thanks to \u003ca href=\"https://github.com/LecrisUT\"\u003e\u003ccode\u003e@​LecrisUT\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Officially support Python 3.13 (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Publish packages to PyPI with digital attestations (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGoogle: Fix multi-line parameter definitions (thanks to \u003ca href=\"https://github.com/coolbeevip\"\u003e\u003ccode\u003e@​coolbeevip\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAttrdoc: Remove use of deprecated ast classes (thanks to \u003ca href=\"https://github.com/fedepell\"\u003e\u003ccode\u003e@​fedepell\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.16 (2024-03-15)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eParser: add a new property, \u003ccode\u003edescription\u003c/code\u003e, that combines short and long\ndescriptions into a single string (thanks to \u003ca href=\"https://github.com/pR0Ps\"\u003e\u003ccode\u003e@​pR0Ps\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: support Python 3.12 (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.15 (2022-09-05)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eParser: add a new function, \u003ccode\u003eparse_from_object\u003c/code\u003e, that supports scattered\ndocstrings (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.14.1 (2022-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eParser: fix autodetection (regression from 0.14)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.14 (2022-04-25)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eNumpydoc: Improved support for Example / Examples section\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.13 (2021-11-17)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGoogle: Added support for Example / Examples section\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.12 (2021-10-15)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGeneral: Added support for lone \u003ccode\u003e:rtype:\u003c/code\u003e meta information (thanks to \u003ca href=\"https://github.com/abergou\"\u003e\u003ccode\u003e@​abergou\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.11 (2021-09-30)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGeneral: Started tracking changes\u003c/li\u003e\n\u003cli\u003eGeneral: Added ability to combine function docstrings (thanks to \u003ca href=\"https://gi...\n\n_Description has been truncated_","html_url":"https://github.com/Aman12x/DataPilot/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aman12x%2FDataPilot/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"},{"uuid":"4755449956","node_id":"PR_kwDOS7Plt87rJwvR","number":10,"state":"closed","title":"Bump the dependencies group across 1 directory with 22 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-26T22:29:34.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-26T22:17:48.000Z","updated_at":"2026-06-26T22:29:36.000Z","time_to_close":706,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"dependencies","update_count":22,"packages":[{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"django","old_version":"5.2.15","new_version":"6.0.6","repository_url":"https://github.com/django/django"},{"name":"prek","old_version":"0.4.4","new_version":"0.4.5","repository_url":"https://github.com/j178/prek"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.51","repository_url":"https://github.com/astral-sh/ty"},{"name":"boto3","old_version":"1.43.23","new_version":"1.43.34","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.23","new_version":"1.43.34","repository_url":"https://github.com/boto/botocore"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.18.0","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.1","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"grpcio","old_version":"1.81.0","new_version":"1.81.1","repository_url":"https://github.com/grpc/grpc"},{"name":"icalendar","old_version":"7.1.2","new_version":"7.1.3","repository_url":"https://github.com/collective/icalendar"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.35.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pypdf","old_version":"6.13.0","new_version":"6.13.3","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"s3transfer","old_version":"0.18.0","new_version":"0.19.0","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.61.1","new_version":"2.63.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tqdm","old_version":"4.68.1","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"},{"name":"wcwidth","old_version":"0.7.0","new_version":"0.8.1","repository_url":"https://github.com/jquast/wcwidth"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.2.1","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zopfli","old_version":"0.4.2","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 22 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.6.17` |\n| [django](https://github.com/django/django) | `5.2.15` | `6.0.6` |\n| [prek](https://github.com/j178/prek) | `0.4.4` | `0.4.5` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.51` |\n| [boto3](https://github.com/boto/boto3) | `1.43.23` | `1.43.34` |\n| [botocore](https://github.com/boto/botocore) | `1.43.23` | `1.43.34` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.18.0` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.1` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.0` | `1.81.1` |\n| [icalendar](https://github.com/collective/icalendar) | `7.1.2` | `7.1.3` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.35.1` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.0` | `6.13.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.18.0` | `0.19.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.61.1` | `2.63.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.1` | `4.68.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.7.0` | `0.8.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.2.1` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.2` | `0.4.3` |\n\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 `django` from 5.2.15 to 6.0.6\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/ee93f65169c280c9ab3d2ce103dd478c96d05065\"\u003e\u003ccode\u003eee93f65\u003c/code\u003e\u003c/a\u003e [6.0.x] Bumped version for 6.0.6 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1721035a72624aad7b38dd19b14013efd94b24b8\"\u003e\u003ccode\u003e1721035\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-48587 -- Ignored whitespace padding when checking Vary...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/664652f1a2dd80d8a4cd491b4313cad915ae6669\"\u003e\u003ccode\u003e664652f\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-35193 -- Varied on Authorization when caching non-publ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/b4330259ffbe1a031ed14daab1f35697460f10f2\"\u003e\u003ccode\u003eb433025\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-8404 -- Used Cache-Control directives case-insensitive...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/625a670c467aa3118c0f8ae1e0df14dbebb3bf68\"\u003e\u003ccode\u003e625a670\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-7666 -- Delayed setting SMTP connection until fully co...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c807d9c398022d23cb27518fa6ecaf343efb30cf\"\u003e\u003ccode\u003ec807d9c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-6873 -- Prevented signed cookie salt namespace collisi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/98a75e39cfc63fa72162027b5678943b78a4469b\"\u003e\u003ccode\u003e98a75e3\u003c/code\u003e\u003c/a\u003e [6.0.x] Included commit hash in checksum file when building artifacts for rel...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dd895d6268f1dd544a565a321cb4527ca3ca1173\"\u003e\u003ccode\u003edd895d6\u003c/code\u003e\u003c/a\u003e [6.0.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/49ca2db7f4d4ca4a7735a40610d59c84a039eb32\"\u003e\u003ccode\u003e49ca2db\u003c/code\u003e\u003c/a\u003e [6.0.x] Updated links to severity levels in release notes.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c9f32a2301a9aa897f967fd8077496455ebf5d77\"\u003e\u003ccode\u003ec9f32a2\u003c/code\u003e\u003c/a\u003e [6.0.x] Added stub release notes and release date for 6.0.6 and 5.2.15.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.15...6.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `prek` from 0.4.4 to 0.4.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/j178/prek/releases\"\u003eprek's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.4.5\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-15.\u003c/p\u003e\n\u003ch3\u003e✨Highlights\u003c/h3\u003e\n\u003cp\u003e0.4.5 completes \u003ccode\u003eprek\u003c/code\u003e's pre-commit language coverage. With R, Conda, Perl,\nand coursier now supported, \u003ccode\u003eprek\u003c/code\u003e supports every language available in\npre-commit, plus \u003ccode\u003eprek\u003c/code\u003e-only modern languages such as Bun and Deno.\u003c/p\u003e\n\u003cp\u003eThis is full feature parity with pre-commit. The last major compatibility gap\nis closed, and \u003ccode\u003eprek\u003c/code\u003e is now on the path to 1.0.\u003c/p\u003e\n\u003ch3\u003e💚 Sponsorship\u003c/h3\u003e\n\u003cp\u003eIf \u003ccode\u003eprek\u003c/code\u003e saves time for you or your team, please consider sponsoring the\nproject on \u003ca href=\"https://github.com/sponsors/j178\"\u003eGitHub Sponsors\u003c/a\u003e. It helps keep\nnew features, performance work, and maintenance moving.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePerl\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2201\"\u003e#2201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eR\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2206\"\u003e#2206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eConda\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2203\"\u003e#2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecoursier\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2194\"\u003e#2194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd group filters to list (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2152\"\u003e#2152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove legacy repo path support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2150\"\u003e#2150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip cloning fully filtered remote repos (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2151\"\u003e#2151\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid building JSON trees in syntax hooks (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2156\"\u003e#2156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eScan mixed line endings without line vector (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2160\"\u003e#2160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip file scan for always-run no-filename hooks (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2155\"\u003e#2155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse fixed buffer for EOF scan (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2163\"\u003e#2163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse fixed buffer for private key scan (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2164\"\u003e#2164\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix pretty-format-json CRLF handling (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2210\"\u003e#2210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle missing blobs in diff snapshots (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2211\"\u003e#2211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIgnore coursier channel from working repo (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2202\"\u003e#2202\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/j178\"\u003e\u003ccode\u003e@​j178\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall prek 0.4.5\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/j178/prek/blob/master/CHANGELOG.md\"\u003eprek's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.4.5\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-15.\u003c/p\u003e\n\u003ch3\u003e✨Highlights\u003c/h3\u003e\n\u003cp\u003e0.4.5 completes \u003ccode\u003eprek\u003c/code\u003e's pre-commit language coverage. With R, Conda, Perl,\nand coursier now supported, \u003ccode\u003eprek\u003c/code\u003e supports every language available in\npre-commit, plus \u003ccode\u003eprek\u003c/code\u003e-only modern languages such as Bun and Deno.\u003c/p\u003e\n\u003cp\u003eThis is full feature parity with pre-commit. The last major compatibility gap\nis closed, and \u003ccode\u003eprek\u003c/code\u003e is now on the path to 1.0.\u003c/p\u003e\n\u003ch3\u003e💚 Sponsorship\u003c/h3\u003e\n\u003cp\u003eIf \u003ccode\u003eprek\u003c/code\u003e saves time for you or your team, please consider sponsoring the\nproject on \u003ca href=\"https://github.com/sponsors/j178\"\u003eGitHub Sponsors\u003c/a\u003e. It helps keep\nnew features, performance work, and maintenance moving.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePerl\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2201\"\u003e#2201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eR\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2206\"\u003e#2206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eConda\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2203\"\u003e#2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecoursier\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2194\"\u003e#2194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd group filters to list (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2152\"\u003e#2152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove legacy repo path support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2150\"\u003e#2150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip cloning fully filtered remote repos (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2151\"\u003e#2151\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid building JSON trees in syntax hooks (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2156\"\u003e#2156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eScan mixed line endings without line vector (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2160\"\u003e#2160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip file scan for always-run no-filename hooks (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2155\"\u003e#2155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse fixed buffer for EOF scan (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2163\"\u003e#2163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse fixed buffer for private key scan (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2164\"\u003e#2164\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix pretty-format-json CRLF handling (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2210\"\u003e#2210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle missing blobs in diff snapshots (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2211\"\u003e#2211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIgnore coursier channel from working repo (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2202\"\u003e#2202\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/j178\"\u003e\u003ccode\u003e@​j178\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/j178/prek/commit/bb3108283fd4aab0d9eb59f23098e0c05a96cdbe\"\u003e\u003ccode\u003ebb31082\u003c/code\u003e\u003c/a\u003e Update README.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/fa4e2dc060eccac3c2521ec7bf4af1272c5d6205\"\u003e\u003ccode\u003efa4e2dc\u003c/code\u003e\u003c/a\u003e Bump version to 0.4.5 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/e9336fa724b8a99b3a21fd60eb0849cd731153ef\"\u003e\u003ccode\u003ee9336fa\u003c/code\u003e\u003c/a\u003e Add R language support (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2206\"\u003e#2206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/97a5a15701d3691287e4f969a2a2f421d1501a46\"\u003e\u003ccode\u003e97a5a15\u003c/code\u003e\u003c/a\u003e Update Rust crate which to v8.0.3 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2219\"\u003e#2219\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/20a519aa2aa4add7e70dfbb2ff743cd1f35e25f3\"\u003e\u003ccode\u003e20a519a\u003c/code\u003e\u003c/a\u003e Update Rust crate ignore to v0.4.26 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2218\"\u003e#2218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/88f0e2bd8a7d02be7fb19fcd17e1e8db79b8b0bc\"\u003e\u003ccode\u003e88f0e2b\u003c/code\u003e\u003c/a\u003e Update dependency uv to v0.11.19 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2214\"\u003e#2214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/7bd43000679b33e2b947f453436237dae062af70\"\u003e\u003ccode\u003e7bd4300\u003c/code\u003e\u003c/a\u003e Update GitHub Actions to v7 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/48ed5cc2838066d71278dd887dee595c32085be2\"\u003e\u003ccode\u003e48ed5cc\u003c/code\u003e\u003c/a\u003e Update Rust crate async_zip to 0.0.18 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2217\"\u003e#2217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/257e98a429e96f89a4d965ad28568cba77ca33c2\"\u003e\u003ccode\u003e257e98a\u003c/code\u003e\u003c/a\u003e Update pre-commit to v1.47.2 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2216\"\u003e#2216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/0c0460241a13b9ac519e1abd3a0a8a3ad60d4d2f\"\u003e\u003ccode\u003e0c04602\u003c/code\u003e\u003c/a\u003e Update GitHub Actions (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2215\"\u003e#2215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/j178/prek/compare/v0.4.4...v0.4.5\"\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 `ty` from 0.0.1a21 to 0.0.51\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ty/releases\"\u003ety's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.51\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix bound TypeVar default cycle recovery (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26124\"\u003e#26124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eAnnotated[Any, ...]\u003c/code\u003e as a class base (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26133\"\u003e#26133\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLSP server\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSuggest keyword-only arguments between variadic parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26134\"\u003e#26134\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCore type checking\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid assuming classes with \u003ccode\u003eAny\u003c/code\u003e or \u003ccode\u003eUnknown\u003c/code\u003e bases are descriptors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26120\"\u003e#26120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInfer simpler types in complex lambda cycles (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26137\"\u003e#26137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve exact class objects during identity narrowing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26117\"\u003e#26117\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDiagnostics\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve unpacking diagnostics for nested assignment targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26121\"\u003e#26121\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompact indexed AST node storage (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25998\"\u003e#25998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDiscard dead DNF branches in intersection building (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26144\"\u003e#26144\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove broken gradual guarantee link (\u003ca href=\"https://redirect.github.com/astral-sh/ty/pull/3806\"\u003e#3806\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/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ibraheemdev\"\u003e\u003ccode\u003e@​ibraheemdev\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ty 0.0.51\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/ty/releases/download/0.0.51/ty-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\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/astral-sh/ty/blob/main/CHANGELOG.md\"\u003ety's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.51\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix bound TypeVar default cycle recovery (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26124\"\u003e#26124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eAnnotated[Any, ...]\u003c/code\u003e as a class base (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26133\"\u003e#26133\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLSP server\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSuggest keyword-only arguments between variadic parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26134\"\u003e#26134\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCore type checking\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid assuming classes with \u003ccode\u003eAny\u003c/code\u003e or \u003ccode\u003eUnknown\u003c/code\u003e bases are descriptors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26120\"\u003e#26120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInfer simpler types in complex lambda cycles (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26137\"\u003e#26137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve exact class objects during identity narrowing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26117\"\u003e#26117\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDiagnostics\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve unpacking diagnostics for nested assignment targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26121\"\u003e#26121\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompact indexed AST node storage (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25998\"\u003e#25998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDiscard dead DNF branches in intersection building (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26144\"\u003e#26144\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove broken gradual guarantee link (\u003ca href=\"https://redirect.github.com/astral-sh/ty/pull/3806\"\u003e#3806\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/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ibraheemdev\"\u003e\u003ccode\u003e@​ibraheemdev\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.50\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-17.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid cross-TypeVar leakage in generic inference (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26099\"\u003e#26099\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix panic from oscillating collection-use constraints (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26031\"\u003e#26031\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve type variables in fixed tuple aliases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26041\"\u003e#26041\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRespect ParamSpec binding contexts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25993\"\u003e#25993\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/b5ef61c13dd0869e403fe3c9d6b7a458f94537a2\"\u003e\u003ccode\u003eb5ef61c\u003c/code\u003e\u003c/a\u003e Bump version to 0.0.51 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3811\"\u003e#3811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/0749deed7656be89b68af39191fe05b2d9d3b2b7\"\u003e\u003ccode\u003e0749dee\u003c/code\u003e\u003c/a\u003e Remove broken gradual guarantee link (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3806\"\u003e#3806\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/556d22cedcefc93cadec8f9b46defa288cc57a3c\"\u003e\u003ccode\u003e556d22c\u003c/code\u003e\u003c/a\u003e fix typo (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3805\"\u003e#3805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/ad35fdff18d84883120c14e3d2cead8903cf8507\"\u003e\u003ccode\u003ead35fdf\u003c/code\u003e\u003c/a\u003e Improve the \u0026quot;Does ty have a strict mode?\u0026quot; FAQ (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3798\"\u003e#3798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/9eb8419ae64191539d6ae19f5d4cccdf47be5e5c\"\u003e\u003ccode\u003e9eb8419\u003c/code\u003e\u003c/a\u003e Expand mypy and Pyright rule mapping (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3783\"\u003e#3783\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/8c5c8c10dc9796520b4ac7eff64d932ab631b437\"\u003e\u003ccode\u003e8c5c8c1\u003c/code\u003e\u003c/a\u003e Bump version to 0.0.50 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3800\"\u003e#3800\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/42a9002aa032cc85dc44c25efe4d8b3a29bfd914\"\u003e\u003ccode\u003e42a9002\u003c/code\u003e\u003c/a\u003e Update benchmarks for ty 0.0.50 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3799\"\u003e#3799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/f515f25eeb6691e00761228dc00bc0de6de1780f\"\u003e\u003ccode\u003ef515f25\u003c/code\u003e\u003c/a\u003e Pass PyPI version to ty-pre-commit when triggering a release in that repo (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/b669da87d3ef53dd6bad8fb7dd7e950d3ec3e3f4\"\u003e\u003ccode\u003eb669da8\u003c/code\u003e\u003c/a\u003e Bump version to 0.0.49 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3749\"\u003e#3749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/79f0f513f71ed68ba81f297cae97f4a578669d61\"\u003e\u003ccode\u003e79f0f51\u003c/code\u003e\u003c/a\u003e Fixups to new AGENTS.md file (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3741\"\u003e#3741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ty/compare/0.0.1-alpha.21...0.0.51\"\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.23 to 1.43.34\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1820b7d9f7558b191720bf75fb45f2c52bb6917d\"\u003e\u003ccode\u003e1820b7d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.34'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2178e7a51bf37fae9f093543e265a5b5a5093f3b\"\u003e\u003ccode\u003e2178e7a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.34\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/797f30df0d9e5f0f0110f87b06e3d35081a87feb\"\u003e\u003ccode\u003e797f30d\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/325a0591f60526c83cef87a4f4316baae01ce787\"\u003e\u003ccode\u003e325a059\u003c/code\u003e\u003c/a\u003e Remove DocumentModifiedShape and re-export it from botocore (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4795\"\u003e#4795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/44bfb9a45ba93c9841b83670da17f52243b89b66\"\u003e\u003ccode\u003e44bfb9a\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.33'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/447ab8f8a6b9d0d743e9f1d38283d57ffd9e8d53\"\u003e\u003ccode\u003e447ab8f\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.33' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1a41f9c58335a0ece89a9f0f2d43c141ff4ae095\"\u003e\u003ccode\u003e1a41f9c\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.33\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3a2819d48ea7fe0b1c29a1daab69762a819a70be\"\u003e\u003ccode\u003e3a2819d\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/22ffece9223b6e342ce586a9ceb717050a0fd097\"\u003e\u003ccode\u003e22ffece\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/4802\"\u003e#4802\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/19645b7bc9fc471787857ded454ea0636e89955e\"\u003e\u003ccode\u003e19645b7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.32'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.23...1.43.34\"\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.23 to 1.43.34\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/67d724c0e1b10da9709b2df815b803ab202c31cd\"\u003e\u003ccode\u003e67d724c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.34'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/8279c40bc01efa45591e18179b40fb149926201f\"\u003e\u003ccode\u003e8279c40\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.34\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/42c8aee51b5a4acfa9544d0ecfe63d5013318784\"\u003e\u003ccode\u003e42c8aee\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/f1f68269807302b0b74a0ecde3afb406138829e5\"\u003e\u003ccode\u003ef1f6826\u003c/code\u003e\u003c/a\u003e Merge customizations for Glue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/9634887a7a22d7cb59b8032e9a3fc55b80d6a198\"\u003e\u003ccode\u003e9634887\u003c/code\u003e\u003c/a\u003e Document policyDocumentShape for iam operations as a dict (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3721\"\u003e#3721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/1ac5768f12eb16055f141fb9b9fca92f64567731\"\u003e\u003ccode\u003e1ac5768\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.33'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/dbfa9d0d2bdad5476556e632d96126a0b2a0e4ce\"\u003e\u003ccode\u003edbfa9d0\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.33' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/911ee327ee133fd63aeaa25aaaa63ef4f452840a\"\u003e\u003ccode\u003e911ee32\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.33\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/77e35af7c72dfebbf2b4850181b594a5510e7a89\"\u003e\u003ccode\u003e77e35af\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/42d47f67015c92f7f879e0baeae8e7c9084504e5\"\u003e\u003ccode\u003e42d47f6\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/3730\"\u003e#3730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.23...1.43.34\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth` from 65.14.3 to 65.18.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-js-asset` from 3.1.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/feincms/django-js-asset/blob/main/CHANGELOG.rst\"\u003edjango-js-asset's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. _changelog:\u003c/p\u003e\n\u003ch1\u003eChange log\u003c/h1\u003e\n\u003cp\u003eNext version\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Fixed ``js_asset.Media`` crashing with an ``AttributeError`` when rendering an\n  asset that only implements Django's plain ``__html__`` contract (neither a\n  ``MediaAsset`` nor one of our ``ImportMap``/``JSON`` types). Such assets now\n  fall back to ``__html__()`` exactly like ``django.forms.Media`` does; the\n  nonce cannot be threaded into an opaque ``__html__`` asset, same as with stock\n  Django.\n- Corrected the docs around Django 6.1 support. Thanks James Bligh!\n- Finally set up a documentation site at Read the Docs for django-js-asset.\n\u003cp\u003e4.0 (2026-06-11)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eThis is a major release. Most code keeps working unchanged and the rendered\nHTML is the same, but \u003cstrong\u003eif you use import maps the upgrade is not automatic\u003c/strong\u003e --\nsee the import-map note at the end.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ejs_asset.Media\u003c/code\u003e, a \u003ccode\u003edjango.forms.Media\u003c/code\u003e subclass with two extra\nabilities. First, it merges every embedded \u003ccode\u003eImportMap\u003c/code\u003e into a single\n\u003ccode\u003e\u0026lt;script type=\u0026quot;importmap\u0026quot;\u0026gt;\u003c/code\u003e rendered before any other script -- this\nreplaces the old global \u003ccode\u003eimportmap\u003c/code\u003e object and works no matter how many\nmedia objects Django combines. Second, it applies a request-scoped CSP nonce\nto the tags it renders. It implements \u003ccode\u003e__add__\u003c/code\u003e \u003cstrong\u003eand\u003c/strong\u003e \u003ccode\u003e__radd__\u003c/code\u003e, so it\nkeeps its type -- and its nonce -- when combined with a plain \u003ccode\u003eforms.Media\u003c/code\u003e\nfrom either side (e.g. while Django collects form and widget media). The nonce\ncan be passed to the constructor (\u003ccode\u003enonce=\u003c/code\u003e), copied onto a clone with\n\u003ccode\u003ewith_nonce()\u003c/code\u003e, or passed to \u003ccode\u003erender(nonce=...)\u003c/code\u003e; \u003ccode\u003erender()\u003c/code\u003e also accepts\n\u003ccode\u003eattrs={\u0026quot;nonce\u0026quot;: ...}\u003c/code\u003e so it plugs straight into Django 6.2's\n\u003ccode\u003e{% csp_nonce_attr %}\u003c/code\u003e tag. \u003ccode\u003eMedia.from_media()\u003c/code\u003e wraps an existing\n\u003ccode\u003eforms.Media\u003c/code\u003e instance (e.g. \u003ccode\u003eform.media\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eJS\u003c/code\u003e and \u003ccode\u003eCSS\u003c/code\u003e now \u003cem\u003eproduce\u003c/em\u003e Django's own \u003ccode\u003eScript\u003c/code\u003e and \u003ccode\u003eStylesheet\u003c/code\u003e\nobjects (backported via \u003ccode\u003ejs_asset._compat\u003c/code\u003e on Django versions that lack\nthem) instead of being standalone dataclasses. They therefore share merge\nbuckets with native Django assets and with bare path strings, so the same\nfile is no longer rendered more than once when \u003ccode\u003ejs_asset\u003c/code\u003e assets, plain\nstrings and Django's auto-wrapped assets meet in \u003ccode\u003eforms.Media.merge()\u003c/code\u003e.\n\u003ccode\u003eisinstance(x, JS)\u003c/code\u003e / \u003ccode\u003eisinstance(x, CSS)\u003c/code\u003e keep working (via a metaclass).\nInline CSS (\u003ccode\u003eCSS(src, inline=True)\u003c/code\u003e) is rendered by a small dedicated\n\u003ccode\u003eInlineStyle\u003c/code\u003e asset. Rendered output is unchanged.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eScript\u003c/code\u003e, \u003ccode\u003eStylesheet\u003c/code\u003e, \u003ccode\u003eMediaAsset\u003c/code\u003e and \u003ccode\u003eInlineStyle\u003c/code\u003e can now be\nimported from \u003ccode\u003ejs_asset\u003c/code\u003e -- prefer these in \u003ccode\u003eisinstance\u003c/code\u003e checks over\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/7c024a3ef83a1c2951f2ab3925e85b81ebbc8bc0\"\u003e\u003ccode\u003e7c024a3\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/59aa7e529ef7052c3c1710e8a673c14c852334f6\"\u003e\u003ccode\u003e59aa7e5\u003c/code\u003e\u003c/a\u003e Fix \u003cstrong\u003ehtml\u003c/strong\u003e objects in Media\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b3c515c793185d96d43124a8239267a535bdd18f\"\u003e\u003ccode\u003eb3c515c\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/8a343389d9500999bd3397a1d1c44cb5ee709a00\"\u003e\u003ccode\u003e8a34338\u003c/code\u003e\u003c/a\u003e Address review comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b7d05eb0f4d7548219b06eb4057fe908c2e85a23\"\u003e\u003ccode\u003eb7d05eb\u003c/code\u003e\u003c/a\u003e Remove the global importmap and update the guidance accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/3213b9bd209527e989c0fb8f552e7941407460cc\"\u003e\u003ccode\u003e3213b9b\u003c/code\u003e\u003c/a\u003e Increase interoperability with Django's own object-based media assets\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/cfe3b529f22bd8dcd1abf193aa4af0f1e96681be\"\u003e\u003ccode\u003ecfe3b52\u003c/code\u003e\u003c/a\u003e Add a Media subclass with import-map merging and CSP nonce support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/6708307bd5e1d5cc18cb58da63e2c6ace07e653c\"\u003e\u003ccode\u003e6708307\u003c/code\u003e\u003c/a\u003e dj62 does not exist yet as a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/9961d4871605432a9923d2a844d51d9efca47c73\"\u003e\u003ccode\u003e9961d48\u003c/code\u003e\u003c/a\u003e Run tests with newer Django and Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/f77abf57e6754612793c9976305f704f61dfceff\"\u003e\u003ccode\u003ef77abf5\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/feincms/django-js-asset/issues/20\"\u003e#20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/feincms/django-js-asset/compare/3.1.2...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-money` from 3.6.0 to 3.6.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-money/django-money/releases\"\u003edjango-money's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.6.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://django-money.readthedocs.io/en/latest/changes.html\"\u003ehttps://django-money.readthedocs.io/en/latest/changes.html\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/django-money/django-money/blob/main/docs/changes.rst\"\u003edjango-money's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003e3.6.1\u003c/code\u003e_ - 2026-06-07\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAdded\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eUniRateBackend\u003c/code\u003e exchange-rate backend for \u003ccode\u003eUniRateAPI \u0026lt;https://unirateapi.com\u0026gt;\u003c/code\u003e_. Configure via \u003ccode\u003eEXCHANGE_BACKEND = \u0026quot;djmoney.contrib.exchange.backends.UniRateBackend\u0026quot;\u003c/code\u003e and set \u003ccode\u003eUNIRATE_ACCESS_KEY\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanged\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpsert rates instead of deleting and recreating them :github-issue:\u003ccode\u003e818\u003c/code\u003e (:github-user:\u003ccode\u003e2tunnels\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to reflect currently supported Python (3.10–3.13) and Django (4.2–5.2) versions. :github-issue:\u003ccode\u003e820\u003c/code\u003e (:github-user:\u003ccode\u003esmhtbtb\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ccode\u003e3.6\u003c/code\u003e_ - 2026-01-27\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAdded\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for callable \u003ccode\u003edefault\u003c/code\u003e and \u003ccode\u003ecurrency_default\u003c/code\u003e, and \u003ccode\u003ecurrency_choices\u003c/code\u003e :github-issue:\u003ccode\u003e683\u003c/code\u003e (:github-user:\u003ccode\u003ebenjaoming\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ebackend\u003c/code\u003e kwarg to \u003ccode\u003econvert_money\u003c/code\u003e function :github-issue:\u003ccode\u003e787\u003c/code\u003e (:github-user:\u003ccode\u003eheckad\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd getting a limit value from a callable :github-issue:\u003ccode\u003e810\u003c/code\u003e (:github-user:\u003ccode\u003eheckad\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFixed\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe auto-generated hidden input field that tracks initial data in formsets with MoneyField should now work :github-issue:\u003ccode\u003e803\u003c/code\u003e (:github-user:\u003ccode\u003ebenjaoming\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanged\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate to pyproject.toml and uv :github-issue:\u003ccode\u003e791\u003c/code\u003e (:github-user:\u003ccode\u003ebrowniebroke\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eRemoved\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.8 and 3.9 support was dropped to give way for typehints :github-issue:\u003ccode\u003e781\u003c/code\u003e (:github-user:\u003ccode\u003ebenjaoming\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ccode\u003e3.5.4\u003c/code\u003e_ - 2025-04-17\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAdded\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDjango 5.2 and Python 3.13 support :github-issue:\u003ccode\u003e785\u003c/code\u003e (:github-user:\u003ccode\u003egvangool\u003c/code\u003e and :github-user:\u003ccode\u003ebrowniebroke\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ccode\u003e3.5.3\u003c/code\u003e_ - 2024-08-01\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eFixed\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edjango-rest-framework: MoneyField does not work anymore with custom serializer fields :github-issue:\u003ccode\u003e768\u003c/code\u003e (:github-user:\u003ccode\u003eapjama\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/django-money/django-money/commit/778f51df21a4ceee8d229e771c030b4ee288de00\"\u003e\u003ccode\u003e778f51d\u003c/code\u003e\u003c/a\u003e bump to 3.6.1 (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/826\"\u003e#826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-money/django-money/commit/a2ec3fd287d293e74a3ace9affd151f400c3db8a\"\u003e\u003ccode\u003ea2ec3fd\u003c/code\u003e\u003c/a\u003e Add UniRateBackend exchange-rate backend (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/821\"\u003e#821\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-money/django-money/commit/8b9f1f452a363e5a825bfd803ffddceb66ce0aa7\"\u003e\u003ccode\u003e8b9f1f4\u003c/code\u003e\u003c/a\u003e Remove uv.lock file (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/816\"\u003e#816\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-money/django-money/commit/72b99755ef9da91e67917e95701485454728b0a1\"\u003e\u003ccode\u003e72b9975\u003c/code\u003e\u003c/a\u003e Upsert rates instead of deleting and recreating them (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/819\"\u003e#819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-money/django-money/commit/ef1529ab35979ef0c21e232f8b60298ee87f5a44\"\u003e\u003ccode\u003eef1529a\u003c/code\u003e\u003c/a\u003e docs: update README supported versions (closes \u003ca href=\"https://redirect.github.com/django-money/django-money/issues/820\"\u003e#820\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/822\"\u003e#822\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-money/django-money/compare/3.6.0...3.6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-otp` from 1.3.0 to 1.7.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-otp/django-otp/blob/master/CHANGES.rst\"\u003edjango-otp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.7.0 - January 07, 2026 - Async support\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[#185](https://github.com/django-otp/django-otp/issues/185)\u003c/code\u003e_: Make OTPMiddleware async capable\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Aljosha Papsch.\u003c/p\u003e\n\u003cp\u003e.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/185\"\u003e#185\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/185\"\u003edjango-otp/django-otp#185\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.6.3 - October 25, 2025 - Spanish update\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[#182](https://github.com/django-otp/django-otp/issues/182)\u003c/code\u003e_: Correct missing Spanish translations\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[#181](https://github.com/django-otp/django-otp/issues/181)\u003c/code\u003e_: Wrong :rtype: in StaticToken.random_token docstring\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/181\"\u003e#181\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/181\"\u003edjango-otp/django-otp#181\u003c/a\u003e\n.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/182\"\u003e#182\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/182\"\u003edjango-otp/django-otp#182\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.6.2 - October 21, 2025 - Cleanup\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[#179](https://github.com/django-otp/django-otp/issues/179)\u003c/code\u003e_: Add missing gettext strings\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[#180](https://github.com/django-otp/django-otp/issues/180)\u003c/code\u003e_: Remove tests from wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/179\"\u003e#179\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/179\"\u003edjango-otp/django-otp#179\u003c/a\u003e\n.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/180\"\u003e#180\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/180\"\u003edjango-otp/django-otp#180\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.6.1 - July 08, 2025 - Small improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAllow a {token} placeholder in :setting:\u003ccode\u003eOTP_EMAIL_SUBJECT\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.0 - April 02, 2025 - Django 5.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate test matrix for Django 5.2.\u003c/li\u003e\n\u003cli\u003eRemove support for Django 3.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.4 - September 06, 2024 - Ignore proxy models when enumerating device classes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[#161](https://github.com/django-otp/django-otp/issues/161)\u003c/code\u003e_: Discard proxied models when iterating device models\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/161\"\u003e#161\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/161\"\u003edjango-otp/django-otp#161\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/django-otp/django-otp/commit/fc0d50b6f66da10fad250ce1640f0385f3229f48\"\u003e\u003ccode\u003efc0d50b\u003c/code\u003e\u003c/a\u003e Version 1.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/56e4ce3b5618de5d5a8a24c9eb709b51802ad06b\"\u003e\u003ccode\u003e56e4ce3\u003c/code\u003e\u003c/a\u003e Refactor test utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/8c4d4c23649316c55dad6a79fb06fa975e5e4702\"\u003e\u003ccode\u003e8c4d4c2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/0ac4ff33aa88fa73c12aa60713881481116a6d5f\"\u003e\u003ccode\u003e0ac4ff3\u003c/code\u003e\u003c/a\u003e Cleanup and changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/b10df0d8cb94c8242ca48bbcea3d307b553808a5\"\u003e\u003ccode\u003eb10df0d\u003c/code\u003e\u003c/a\u003e Make OTPMiddleware async capable. (\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/185\"\u003e#185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/81211794b8cc9c8befc6c8330b6652d3c4e78fd5\"\u003e\u003ccode\u003e8121179\u003c/code\u003e\u003c/a\u003e Raise requires-python to 3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/38b7ebabd7b4817aec92f884d448eeb462e82108\"\u003e\u003ccode\u003e38b7eba\u003c/code\u003e\u003c/a\u003e Version 1.6.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/b9026d7025da45b0144c99e91b5286c734448012\"\u003e\u003ccode\u003eb9026d7\u003c/code\u003e\u003c/a\u003e Correct Missing Spanish Translations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/ae18ba95bd03534e15583d456572f86ea2f41442\"\u003e\u003ccode\u003eae18ba9\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/181\"\u003e#181\u003c/a\u003e: misdocumented return type.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/c9eef89240985293e0c9f197d0257a5352cfb62d\"\u003e\u003ccode\u003ec9eef89\u003c/code\u003e\u003c/a\u003e Version 1.6.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-otp/django-otp/compare/v1.3.0...v1.7.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 `icalendar` from 7.1.2 to 7.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/collective/icalendar/releases\"\u003eicalendar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.1.3\u003c/h2\u003e\n\u003cp\u003eTo view the changes, please see the \u003ca href=\"https://icalendar.readthedocs.io/en/latest/reference/changelog.html\"\u003eChangelog\u003c/a\u003e. This release can be installed from \u003ca href=\"https://pypi.org/project/icalendar/#history\"\u003ePyPI\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/collective/icalendar/blob/main/CHANGES.rst\"\u003eicalendar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.3 (2026-06-15)\u003c/h2\u003e\n\u003cp\u003eBug fixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Comparing components with ``Component.__eq__`` is no longer exponential in the subcomponent nesting depth, removing a denial-of-service vector where a deeply nested component could take minutes to compare. See `GHSA-cv84-9p8j-fj68 \u0026lt;https://github.com/collective/icalendar/security/advisories/GHSA-cv84-9p8j-fj68\u0026gt;`_. @tidusec\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/f7240bc661548f9806c930f2a95ee2f003cfa8ca\"\u003e\u003ccode\u003ef7240bc\u003c/code\u003e\u003c/a\u003e version 7.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/e85eb8e6dfe598da8cc9b1c208a5dfc012213308\"\u003e\u003ccode\u003ee85eb8e\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/9c783f6574cc108e04b79dcbe9ea917b9c1eba97\"\u003e\u003ccode\u003e9c783f6\u003c/code\u003e\u003c/a\u003e Make test_deeply_nested_equality_at_depth_50 a regression test.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/dc90e913a5bf72dcf294fb27132cb20f135d9584\"\u003e\u003ccode\u003edc90e91\u003c/code\u003e\u003c/a\u003e Update news/+component-equality-complexity.bugfix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/66264ef3b914657688a828ef80aff5f5e80d9663\"\u003e\u003ccode\u003e66264ef\u003c/code\u003e\u003c/a\u003e Update src/icalendar/cal/component.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/cad40cd112c93fd142ec12cc5b37445a849b8a79\"\u003e\u003ccode\u003ecad40cd\u003c/code\u003e\u003c/a\u003e fix: comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/b6b2608ae3af6de40695b4e40f71847485aa0b49\"\u003e\u003ccode\u003eb6b2608\u003c/code\u003e\u003c/a\u003e fix: improve time complexity in src/icalendar/cal\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/collective/icalendar/compare/v7.1.2...v7.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `protobuf` from 6.33.6 to 7.35.1\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/6ebdf851ba78728f0aa145d38454ed9a316fb...\n\n_Description has been truncated_","html_url":"https://github.com/RapariyaDeenu/InvenTree/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/RapariyaDeenu%2FInvenTree/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"},{"uuid":"4751670660","node_id":"PR_kwDOP-c8CM7q9XTd","number":10,"state":"closed","title":"Bump the uv group across 1 directory with 4 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-03T11:36:07.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-26T11:36:09.000Z","updated_at":"2026-07-03T11:36:08.000Z","time_to_close":604798,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"uv","update_count":4,"packages":[{"name":"anyio","old_version":"4.13.0","new_version":"4.14.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"ruff","old_version":"0.15.17","new_version":"0.15.18","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 4 updates in the / directory: [anyio](https://github.com/agronholm/anyio), [certifi](https://github.com/certifi/python-certifi), [ruff](https://github.com/astral-sh/ruff) and [pytest](https://github.com/pytest-dev/pytest).\n\nUpdates `anyio` from 4.13.0 to 4.14.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.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\u003cli\u003e\n\u003cp\u003eFixed lost type information when passing arguments to \u003ccode\u003elru_cache\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1104\"\u003e#1104\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed test resumption after \u003ccode\u003eKeyboardInterrupt\u003c/code\u003e in async generator fixtures on the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1060\"\u003e#1060\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\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/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\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/29a5e04e0f171af9db3a9d0556ed47f91d88d183\"\u003e\u003ccode\u003e29a5e04\u003c/code\u003e\u003c/a\u003e Fixed FastAPI test run\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/4d752ac37e693840036367d58ee6caf19d78e9ba\"\u003e\u003ccode\u003e4d752ac\u003c/code\u003e\u003c/a\u003e Updated downstream test setups for FastAPI and Anthropic MCP\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ebdc9508a3860e23be805985e1b5a67f60b581eb\"\u003e\u003ccode\u003eebdc950\u003c/code\u003e\u003c/a\u003e Added task handle support to start() and start_soon() (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1153\"\u003e#1153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f32bfb89a7fb71fc24a1fc575f402b6a9f13cda0\"\u003e\u003ccode\u003ef32bfb8\u003c/code\u003e\u003c/a\u003e Fixed test suite compatibility issues with Pytest 9.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/85f7e8eada1ed4f077e4760f0c3d20d67452dcb8\"\u003e\u003ccode\u003e85f7e8e\u003c/code\u003e\u003c/a\u003e Added \u003ccode\u003e__slots__\u003c/code\u003e to several classes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b7ea84c275fde6420ea242844bc7fb0fee6132f7\"\u003e\u003ccode\u003eb7ea84c\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1165\"\u003e#1165\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.0\"\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 `ruff` from 0.15.17 to 0.15.18\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.18\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle nested \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25791\"\u003e#25791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop displaying severity in output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26050\"\u003e#26050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25937\"\u003e#25937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in LSP and playground diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26058\"\u003e#26058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Prevent property docstrings starting with verbs (\u003ccode\u003eD421\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23775\"\u003e#23775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Extend \u003ccode\u003ePYI033\u003c/code\u003e to Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect equivalent numeric mapping keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26009\"\u003e#26009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect mapping keys equivalent to booleans (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25982\"\u003e#25982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect repeated signed and complex dictionary keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26007\"\u003e#26007\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-pyi\u003c/code\u003e] Rename \u003ccode\u003ePYI033\u003c/code\u003e to \u003ccode\u003elegacy-type-comment\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e for call keywords (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25999\"\u003e#25999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline parser recovery context checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26038\"\u003e#26038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch parser keywords as bytes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26037\"\u003e#26037\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMove value parsing out of lexing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25360\"\u003e#25360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender subdiagnostics and secondary annotations as related information (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26011\"\u003e#26011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate fix availability for always-fixable rules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26091\"\u003e#26091\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add fix safety section (\u003ccode\u003eTID252\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17491\"\u003e#17491\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eParser\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003e__debug__\u003c/code\u003e lambda parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26022\"\u003e#26022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_\u003c/code\u003e as a match-pattern target (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25977\"\u003e#25977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject multiple starred names in sequence patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25976\"\u003e#25976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject parenthesized star imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26021\"\u003e#26021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject starred comprehension targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26023\"\u003e#26023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unparenthesized generator expressions in class bases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25978\"\u003e#25978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eyield\u003c/code\u003e expressions after commas (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26024\"\u003e#26024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate function type parameter default order (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25981\"\u003e#25981\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.18\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle nested \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25791\"\u003e#25791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop displaying severity in output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26050\"\u003e#26050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25937\"\u003e#25937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in LSP and playground diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26058\"\u003e#26058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Prevent property docstrings starting with verbs (\u003ccode\u003eD421\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23775\"\u003e#23775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Extend \u003ccode\u003ePYI033\u003c/code\u003e to Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect equivalent numeric mapping keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26009\"\u003e#26009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect mapping keys equivalent to booleans (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25982\"\u003e#25982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect repeated signed and complex dictionary keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26007\"\u003e#26007\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-pyi\u003c/code\u003e] Rename \u003ccode\u003ePYI033\u003c/code\u003e to \u003ccode\u003elegacy-type-comment\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e for call keywords (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25999\"\u003e#25999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline parser recovery context checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26038\"\u003e#26038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch parser keywords as bytes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26037\"\u003e#26037\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMove value parsing out of lexing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25360\"\u003e#25360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender subdiagnostics and secondary annotations as related information (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26011\"\u003e#26011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate fix availability for always-fixable rules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26091\"\u003e#26091\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add fix safety section (\u003ccode\u003eTID252\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17491\"\u003e#17491\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eParser\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003e__debug__\u003c/code\u003e lambda parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26022\"\u003e#26022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_\u003c/code\u003e as a match-pattern target (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25977\"\u003e#25977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject multiple starred names in sequence patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25976\"\u003e#25976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject parenthesized star imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26021\"\u003e#26021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject starred comprehension targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26023\"\u003e#26023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unparenthesized generator expressions in class bases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25978\"\u003e#25978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eyield\u003c/code\u003e expressions after commas (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26024\"\u003e#26024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate function type parameter default order (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25981\"\u003e#25981\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/6686f63404207bfdffe8ab0acb25da72c3432190\"\u003e\u003ccode\u003e6686f63\u003c/code\u003e\u003c/a\u003e Bump 0.15.18 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26135\"\u003e#26135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/efbb7325ff5bb92b0a0c0a0efa0ac94e439ee367\"\u003e\u003ccode\u003eefbb732\u003c/code\u003e\u003c/a\u003e [ty] Suggest keyword-only arguments between variadic parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26134\"\u003e#26134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c256d5f573e66612556061bfd0af527136a23c30\"\u003e\u003ccode\u003ec256d5f\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eAnnotated[Any, ...]\u003c/code\u003e as a class base (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26133\"\u003e#26133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/19a4bea1af5b252798d85696f2f397dae91d303d\"\u003e\u003ccode\u003e19a4bea\u003c/code\u003e\u003c/a\u003e [flake8-pyi] Rename PYI033 to legacy-type-comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1d9866cbd673dc68153ad162465e979c47e62a96\"\u003e\u003ccode\u003e1d9866c\u003c/code\u003e\u003c/a\u003e Bump ecosystem-analyzer commit (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26130\"\u003e#26130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/8656c731dded1e91c0e2713405e43bb2c4eb53bf\"\u003e\u003ccode\u003e8656c73\u003c/code\u003e\u003c/a\u003e [ty] Compact indexed AST node storage (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25998\"\u003e#25998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c17c8d9a060f839c0f9b69c69b85d3802ec5dfdf\"\u003e\u003ccode\u003ec17c8d9\u003c/code\u003e\u003c/a\u003e [ty] Garbage-collect cached constraint sets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26116\"\u003e#26116\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ef0fb8fa264035974e57fda59e2baf196ec1fb9e\"\u003e\u003ccode\u003eef0fb8f\u003c/code\u003e\u003c/a\u003e [ty] Fix bound TypeVar default cycle recovery (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26124\"\u003e#26124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b83c02489df8bccda7313a2cdd8369c9b5d1b002\"\u003e\u003ccode\u003eb83c024\u003c/code\u003e\u003c/a\u003e [flake8-pyi] Extend PYI033 to Python files in preview (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e8a5e38858558a68e94397152fd735cacb6ea3b4\"\u003e\u003ccode\u003ee8a5e38\u003c/code\u003e\u003c/a\u003e Update Rust crate zip to v8 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26078\"\u003e#26078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.17...0.15.18\"\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\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/6AMStuff/streamrip/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/6AMStuff%2Fstreamrip/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"},{"uuid":"4751245194","node_id":"PR_kwDOR8p0Wc7q789K","number":923,"state":"open","title":"chore(deps): Bump the python-minor-patch group across 1 directory with 9 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-26T10:26:25.000Z","updated_at":"2026-06-26T18:37: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-patch","update_count":9,"packages":[{"name":"fastapi","old_version":"0.137.1","new_version":"0.138.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"alembic","old_version":"1.18.4","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"pydantic-settings","old_version":"2.14.1","new_version":"2.14.2","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"anyio","old_version":"4.14.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"pytest","old_version":"9.1.0","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"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":"greenlet","old_version":"3.5.1","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 9 updates in the /apps/myrecipes/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.137.1` | `0.138.1` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.18.4` | `1.18.5` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.1` | `2.14.2` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.0` | `4.14.1` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.1.0` | `9.1.1` |\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| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.1` | `3.5.3` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n\n\nUpdates `fastapi` from 0.137.1 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.137.1...0.138.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.18.4 to 1.18.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.5\u003c/h1\u003e\n\u003cp\u003eReleased: June 25, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [commands]\u003c/strong\u003e Added \u003ccode\u003e--splice\u003c/code\u003e support to the \u003ccode\u003emerge()\u003c/code\u003e command. Previously, the\nmerge command would suggest using \u003ccode\u003e--splice\u003c/code\u003e when attempting to merge\nnon-head revisions, but the flag was not actually accepted by the command.\nThe \u003ccode\u003esplice\u003c/code\u003e parameter is now available in both the command-line\ninterface and the \u003ccode\u003ecommand.merge()\u003c/code\u003e function, matching the existing\nsupport in \u003ccode\u003ecommand.revision()\u003c/code\u003e.  Pull request courtesy Kadir Can\nOzden.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1712\"\u003e#1712\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [environment]\u003c/strong\u003e Added \u003ccode\u003eScriptDirectory.get_heads.consider_depends_on\u003c/code\u003e\nparameter to \u003ccode\u003eScriptDirectory.get_heads()\u003c/code\u003e. When set to \u003ccode\u003eTrue\u003c/code\u003e,\nhead revisions that are also a dependency of another revision via\n\u003ccode\u003edepends_on\u003c/code\u003e are excluded from the result, matching the effective\nheads that would be present in the \u003ccode\u003ealembic_version\u003c/code\u003e table after\nrunning all upgrades.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1806\"\u003e#1806\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed rendering of dialect keyword arguments containing\n\u003ccode\u003e~sqlalchemy.schema.Column\u003c/code\u003e objects within sequences, such as\n\u003ccode\u003epostgresql_include\u003c/code\u003e.  These were previously rendered using \u003ccode\u003erepr()\u003c/code\u003e,\nproducing invalid Python in the generated migration scripts.  Column\nobjects within list or tuple values are now correctly rendered as their\nstring column names.  Pull request courtesy Ajay Singh.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1258\"\u003e#1258\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [mysql]\u003c/strong\u003e Implemented type comparison for \u003ccode\u003eENUM\u003c/code\u003e datatypes on MySQL, which\nchecks that the individual enum values are equivalent.  If additional\nentries are on either side, this generates a diff.  Changes of order do not\ngenerate a diff.  Pull request courtesy Furkan Köykıran.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1745\"\u003e#1745\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/779\"\u003e#779\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Fixed bug where the \u003ccode\u003einline_references\u003c/code\u003e parameter of\n\u003ccode\u003eOperations.add_column()\u003c/code\u003e did not include foreign key referential\nactions such as \u003ccode\u003eON DELETE\u003c/code\u003e, \u003ccode\u003eON UPDATE\u003c/code\u003e, \u003ccode\u003eDEFERRABLE\u003c/code\u003e,\n\u003ccode\u003eINITIALLY\u003c/code\u003e, and \u003ccode\u003eMATCH\u003c/code\u003e when rendering the inline \u003ccode\u003eREFERENCES\u003c/code\u003e\nclause.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.14.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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.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 `anyio` from 4.14.0 to 4.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/149b9e907618fadf6840a4d3cebad533b0c7d033\"\u003e\u003ccode\u003e149b9e9\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/377518cd1160314f2fdf74f356ae9e848c94a065\"\u003e\u003ccode\u003e377518c\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the github-actions group (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b42a2f5e8e9910d0c57b970f9a747427a9da26f0\"\u003e\u003ccode\u003eb42a2f5\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1185\"\u003e#1185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/3ceb6ffbfa89be715f444550883356fbfbc13154\"\u003e\u003ccode\u003e3ceb6ff\u003c/code\u003e\u003c/a\u003e Allow 0 tokens in a CapacityLimiter instantiated outside an event loop (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1183\"\u003e#1183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/e10d1db74f7a59cb283a1e4b3b22227da11c6f07\"\u003e\u003ccode\u003ee10d1db\u003c/code\u003e\u003c/a\u003e Add missing await to open_file() in file I/O concurrency example (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1182\"\u003e#1182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1dbc3b62256e5877bcf610aca98ba6e450d14c20\"\u003e\u003ccode\u003e1dbc3b6\u003c/code\u003e\u003c/a\u003e OutcomeException should not discard test runner_task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.0...4.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.1.0 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.1.0...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `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 `greenlet` from 3.5.1 to 3.5.3\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.3 (2026-06-26)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix a crash on free-threaded builds when multiple greenlets were\nholding a critical section on an object and the GIL for the thread\nwas dropped. See \u003ccode\u003eissue 513 \u0026lt;https://github.com/python-greenlet/greenlet/issues/513\u0026gt;\u003c/code\u003e_. Thanks\nto ddorian.\u003c/li\u003e\n\u003c/ul\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\u003c/blockquote\u003e\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/6ee8c2c5b92fbf296c10219030d0bd3ab0ea6300\"\u003e\u003ccode\u003e6ee8c2c\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6ec0bbba46fdcbfbf5fe4a37ab744aa3835f05c6\"\u003e\u003ccode\u003e6ec0bbb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/514\"\u003e#514\u003c/a\u003e from python-greenlet/issue513-preserve-crit-section\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c03a7e6932c3b437bdf873acfc66fbaae31f1875\"\u003e\u003ccode\u003ec03a7e6\u003c/code\u003e\u003c/a\u003e Py3.13+: Preserve thread state critical_section to prevent crash on free-thre...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/bc10829b9eb05d35bc0b8a09c8c6e4d54cfccc18\"\u003e\u003ccode\u003ebc10829\u003c/code\u003e\u003c/a\u003e Speed up manylinux test runs by only running the core checks; only start many...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c2db75dca4bafa562ace9553b6e5c17af6b483e4\"\u003e\u003ccode\u003ec2db75d\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.3\u003c/li\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.5.1...3.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-core` from 2.46.4 to 2.47.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/jykwon91/MyFreeApps/pull/923","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/jykwon91%2FMyFreeApps/issues/923","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/923/packages"},{"uuid":"4739606925","node_id":"PR_kwDORQ8Eq87qWao8","number":130,"state":"open","title":"build(deps): bump the python-minor-patch group across 1 directory with 11 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-25T00:49:57.000Z","updated_at":"2026-06-25T01:11:06.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":11,"packages":[{"name":"certifi","old_version":"2026.2.25","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"charset-normalizer","old_version":"3.4.5","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"docutils","old_version":"0.22.4","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"huggingface-hub","old_version":"1.18.0","new_version":"1.20.1","repository_url":"https://github.com/huggingface/huggingface_hub"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jaraco-context","old_version":"6.1.1","new_version":"6.1.2","repository_url":"https://github.com/jaraco/jaraco.context"},{"name":"jaraco-functools","old_version":"4.4.0","new_version":"4.5.0","repository_url":"https://github.com/jaraco/jaraco.functools"},{"name":"lxml","old_version":"6.1.0","new_version":"6.1.1","repository_url":"https://github.com/lxml/lxml"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"nh3","old_version":"0.3.3","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"semgrep","old_version":"1.166.0","new_version":"1.168.0","repository_url":"https://github.com/semgrep/semgrep"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 11 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.6.17` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.5` | `3.4.7` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.4` | `0.23` |\n| [huggingface-hub](https://github.com/huggingface/huggingface_hub) | `1.18.0` | `1.20.1` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [jaraco-context](https://github.com/jaraco/jaraco.context) | `6.1.1` | `6.1.2` |\n| [jaraco-functools](https://github.com/jaraco/jaraco.functools) | `4.4.0` | `4.5.0` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.0` | `6.1.1` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [nh3](https://github.com/messense/nh3) | `0.3.3` | `0.3.6` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.166.0` | `1.168.0` |\n\n\nUpdates `certifi` from 2026.2.25 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.06.17\"\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.5 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\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.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\u003c/blockquote\u003e\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.5...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `docutils` from 0.22.4 to 0.23\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/rtfd/recommonmark/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `huggingface-hub` from 1.18.0 to 1.20.1\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.20.0] Browser-based OAuth login, multi-commit folder uploads, and more\u003c/h2\u003e\n\u003ch2\u003e🔒 Browser-based OAuth login\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehf auth login\u003c/code\u003e now defaults to a browser-based OAuth Device Code flow instead of asking you to copy-paste a token. The command prints a URL and a short code, you authorize in the browser, and the CLI retrieves and saves the token for you. The same applies to \u003ccode\u003elogin()\u003c/code\u003e in Python. In an interactive terminal you still get a \u003ccode\u003egh\u003c/code\u003e-style arrow-key menu to pick between browser login and pasting a token, and \u003ccode\u003e--token\u003c/code\u003e works exactly as before.\u003c/p\u003e\n\u003cp\u003eOAuth tokens expire after 30 days, but they come with a refresh token: \u003ccode\u003eget_token()\u003c/code\u003e transparently refreshes them when less than a day of validity remains, so long-running setups keep working without re-authenticating. \u003ccode\u003ehf auth list\u003c/code\u003e now shows the expiry date for OAuth tokens.\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e\u0026gt; hf auth login\r\n? How would you like to log in? Log in with your browser\r\n\u003cpre\u003e\u003ccode\u003eOpen this URL in your browser:\r\n    https://hf.co/oauth/device\r\n\r\nAnd enter the code: 52AT-FLYZ\r\n\r\nWaiting for authorization.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eWhen the command is run by an AI agent, it never prompts. Instead it streams structured events so the agent can surface the URL and code to its user, then blocks until a terminal \u003ccode\u003eauth_success\u003c/code\u003e / \u003ccode\u003eauth_error\u003c/code\u003e event:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ hf auth login --format json\r\n{\u0026quot;event\u0026quot;: \u0026quot;device_code\u0026quot;, \u0026quot;verification_uri\u0026quot;: \u0026quot;https://hf.co/oauth/device\u0026quot;, \u0026quot;user_code\u0026quot;: \u0026quot;52AT-FLYZ\u0026quot;, \u0026quot;verification_uri_complete\u0026quot;: \u0026quot;https://hf.co/oauth/device\u0026quot;, \u0026quot;expires_in\u0026quot;: 300, \u0026quot;interval\u0026quot;: 5}\r\n{\u0026quot;event\u0026quot;: \u0026quot;auth_success\u0026quot;, \u0026quot;user\u0026quot;: \u0026quot;celinah\u0026quot;, \u0026quot;token_name\u0026quot;: \u0026quot;oauth-celinah\u0026quot;}\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003ehf auth list\u003c/code\u003e surfaces the new expiry column:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ hf auth list\r\n  name          token       expires\r\n- ------------- ----------- -------------------\r\n  my-token      hf_****5678\r\n* oauth-user    hf_****1234 2026-07-09\r\n  oauth-old     hf_****9999 2026-06-09 (expired)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eFinally, \u003ccode\u003enotebook_login()\u003c/code\u003e now renders the link and code with plain \u003ccode\u003eIPython.display.HTML\u003c/code\u003e, dropping the \u003ccode\u003eipywidgets\u003c/code\u003e dependency.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e[Auth] Browser-based OAuth login 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/4354\"\u003e#4354\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚡ Faster, more reliable \u003ccode\u003ehf upload\u003c/code\u003e for large folders\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehf upload\u003c/code\u003e and the underlying \u003ccode\u003eupload_folder\u003c/code\u003e have been revamped to be faster and far more robust on large folders. When \u003ccode\u003ehf_xet\u003c/code\u003e is installed (the default), uploads now run through a streamed, multi-commit pipeline built on the \u003ccode\u003eXetSession\u003c/code\u003e API: the folder is scanned and fed into a background Xet upload while previous batches are committed in parallel, and files are hashed in a single read pass while they are chunked (the old flow read every large file twice). Nothing changes in how you call it:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ehf upload \u0026lt;repo-id\u0026gt; \u0026lt;path/to/folder\u0026gt;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/5efdca0b066740c911e59feba2f14e145ff3dbfb\"\u003e\u003ccode\u003e5efdca0\u003c/code\u003e\u003c/a\u003e Release: v1.20.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/0c3a0622f413923853faced000b97446194a6fae\"\u003e\u003ccode\u003e0c3a062\u003c/code\u003e\u003c/a\u003e [Auth] Fix circular import on \u003ccode\u003efrom huggingface_hub import login\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4384\"\u003e#4384\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4\"\u003e#4\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/8d52526f5d44cf835b9c2a9fb2e4ac03d545c8ed\"\u003e\u003ccode\u003e8d52526\u003c/code\u003e\u003c/a\u003e Release: v1.20.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/9379ae35ee840fdf889147c7f21fadb32c44db03\"\u003e\u003ccode\u003e9379ae3\u003c/code\u003e\u003c/a\u003e Release: v1.20.0.rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/3b3abe38b7ae761eb1bebfb0676b5bd2b9f2a2c1\"\u003e\u003ccode\u003e3b3abe3\u003c/code\u003e\u003c/a\u003e [Spaces] Add \u003ccode\u003ewait_for_space\u003c/code\u003e API and \u003ccode\u003ehf spaces wait\u003c/code\u003e CLI (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4380\"\u003e#4380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/e52fdef6100a9f3a5d08a146fe99910f297807e0\"\u003e\u003ccode\u003ee52fdef\u003c/code\u003e\u003c/a\u003e [CLI] Make \u003ccode\u003ehf jobs ssh\u003c/code\u003e wait for job to be running (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4379\"\u003e#4379\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/a0c1dfeeb1ef7468e616012149b62fd3566915b2\"\u003e\u003ccode\u003ea0c1dfe\u003c/code\u003e\u003c/a\u003e [Jobs] Add \u003ccode\u003ehf jobs wait\u003c/code\u003e and \u003ccode\u003eHfApi.wait_for_job\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4345\"\u003e#4345\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/558987464c237d84cd1f6e3062feff420a39b7c5\"\u003e\u003ccode\u003e5589874\u003c/code\u003e\u003c/a\u003e [Inference Endpoints] Custom-container deploy CLI + deprecate protected endpo...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/462d09366e5d215b72b710769326c4c7baf26f9c\"\u003e\u003ccode\u003e462d093\u003c/code\u003e\u003c/a\u003e [CLI] Suggest creating repo/bucket on NotFound errors (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4372\"\u003e#4372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/ebe5315b56c53ad0a912d21ce9558ddc9e9f9be5\"\u003e\u003ccode\u003eebe5315\u003c/code\u003e\u003c/a\u003e Add new JobNotFound error (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4367\"\u003e#4367\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.20.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.15 to 3.18\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.18 (2026-06-02)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen decoding a domain, add a \u003ccode\u003edisplay\u003c/code\u003e argument that will pass\nthrough invalid labels rather than raising an exception.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.17 (2026-05-28)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSubstantial 75% reduction in memory usage through new data\nstructures and some optimization in processing speed.\u003c/li\u003e\n\u003cli\u003eAdded a general 1024-character input length cap to the public\nvalidation, conversion, and codec entry points. This is well above\nany legitimate domain or label and guards against pathological\ninputs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.16 (2026-05-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a command-line interface (\u003ccode\u003epython -m idna\u003c/code\u003e, also available as\nthe \u003ccode\u003eidna\u003c/code\u003e script). Encodes or decodes one or more domains supplied\nas arguments or on standard input, with options to select A-label\nor U-label output and control error handling.\u003c/li\u003e\n\u003cli\u003eRaise the minimum supported Python version to 3.9\u003c/li\u003e\n\u003cli\u003eVarious code quality 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/kjd/idna/commit/f39ea903ba49eb5a0b2c6723c9a929b41ed4a0f1\"\u003e\u003ccode\u003ef39ea90\u003c/code\u003e\u003c/a\u003e Release 3.18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/40f4e407bc7452da37c24b0c112dcda9a5b299ba\"\u003e\u003ccode\u003e40f4e40\u003c/code\u003e\u003c/a\u003e Pre-release 3.18rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1a5bf80f2fa40454589e6144efe5f72015ef9d24\"\u003e\u003ccode\u003e1a5bf80\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/253\"\u003e#253\u003c/a\u003e from kjd/lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5bbb26fc86e28c4ee1434ae8ae8db76de4c2a5ac\"\u003e\u003ccode\u003e5bbb26f\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c532bae5270489cef8faf9f6b1eb70cbcb454c6d\"\u003e\u003ccode\u003ec532bae\u003c/code\u003e\u003c/a\u003e Rename decode() lenient= option to display= (issue \u003ca href=\"https://redirect.github.com/kjd/idna/issues/248\"\u003e#248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0b1758ba11952a2e88fd6141ffa620409bff0580\"\u003e\u003ccode\u003e0b1758b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/252\"\u003e#252\u003c/a\u003e from kjd/release-3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f48619c4cea6859b938d560fdd9feb898e678567\"\u003e\u003ccode\u003ef48619c\u003c/code\u003e\u003c/a\u003e Release 3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7421ba8003227f816142ab40178e3a7d204e6847\"\u003e\u003ccode\u003e7421ba8\u003c/code\u003e\u003c/a\u003e Pre-release 3.17rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/22ebb73b164081f209449b50162eb7ce086e96a4\"\u003e\u003ccode\u003e22ebb73\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/251\"\u003e#251\u003c/a\u003e from kjd/structure-optimizations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2a7ac0a58c788d50112a5003af545a83807fb108\"\u003e\u003ccode\u003e2a7ac0a\u003c/code\u003e\u003c/a\u003e Drop redundant parallel-arrays comment from uts46data\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.15...v3.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jaraco-context` from 6.1.1 to 6.1.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jaraco/jaraco.context/blob/main/NEWS.rst\"\u003ejaraco-context's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev6.1.2\u003c/h1\u003e\n\u003cp\u003eNo significant changes.\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/jaraco/jaraco.context/commit/098f39c911d4504b2c718f2ff483ae24f1c4d378\"\u003e\u003ccode\u003e098f39c\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/926a20e42307a2b5d87b058f2df42345fba61ad4\"\u003e\u003ccode\u003e926a20e\u003c/code\u003e\u003c/a\u003e Fix condition for skipping safety test on Python 3.12 (\u003ca href=\"https://redirect.github.com/jaraco/jaraco.context/issues/20\"\u003e#20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/19f1cbbcf4811fec84c2fee47e51c1a823b7d368\"\u003e\u003ccode\u003e19f1cbb\u003c/code\u003e\u003c/a\u003e Strict type checking and re-enable mypy (\u003ca href=\"https://redirect.github.com/jaraco/jaraco.context/issues/16\"\u003e#16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/256995fa4d2bcaf5513d7d14204045de94b4957d\"\u003e\u003ccode\u003e256995f\u003c/code\u003e\u003c/a\u003e Suppress coverage errors.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/0190667b24bd7b7f5f199ec36dc6e974fa31aab2\"\u003e\u003ccode\u003e0190667\u003c/code\u003e\u003c/a\u003e Suppress type errors in test_safety.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/bc0dc8a641a0ef9539bd7b193c961f8de05344e0\"\u003e\u003ccode\u003ebc0dc8a\u003c/code\u003e\u003c/a\u003e Suppress type errors with new property.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/8eee4d0bbf99ee75163865b150e638378e5a0b46\"\u003e\u003ccode\u003e8eee4d0\u003c/code\u003e\u003c/a\u003e Modernize with ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/825171649ef9d312b6f9740d235d206c0e927c3e\"\u003e\u003ccode\u003e8251716\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into Strict-type-checking-and-re-enable-mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/7df1443e0d81d0f7a781231ab05e00fc4173672e\"\u003e\u003ccode\u003e7df1443\u003c/code\u003e\u003c/a\u003e Restore expression algebra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/616e2d6153eea558d0acf971adefc4d2c9dd6fc9\"\u003e\u003ccode\u003e616e2d6\u003c/code\u003e\u003c/a\u003e Merge \u003ca href=\"https://github.com/jaraco/skeleton\"\u003ehttps://github.com/jaraco/skeleton\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jaraco/jaraco.context/compare/v6.1.1...v6.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jaraco-functools` from 4.4.0 to 4.5.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jaraco/jaraco.functools/blob/main/NEWS.rst\"\u003ejaraco-functools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev4.5.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ebypass_when\u003c/code\u003e and \u003ccode\u003ebypass_unless\u003c/code\u003e now accept callable checks and evaluate\nthem on each invocation instead of binding only at decoration time. (\u003ca href=\"https://redirect.github.com/jaraco/jaraco.functools/issues/36\"\u003e#36\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/jaraco/jaraco.functools/commit/0e89d963ab0a2d6d0755df2424e5e3d5b983cf98\"\u003e\u003ccode\u003e0e89d96\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/4df0abd88dc7c36897b4f40abebda9ae7b24d33e\"\u003e\u003ccode\u003e4df0abd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jaraco/jaraco.functools/issues/36\"\u003e#36\u003c/a\u003e from jaraco/copilot/enhance-bypass-decorators-callables\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/e3ad23e72c049950d79d4c1c702a9b7e286d6983\"\u003e\u003ccode\u003ee3ad23e\u003c/code\u003e\u003c/a\u003e 👹 Feed the hobgoblins (delint).\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/9ed118eb092ba639e925578576192d0da823d93f\"\u003e\u003ccode\u003e9ed118e\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into copilot/enhance-bypass-decorators-callables\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/d3cdfdf173d8f073d3c51f7d452e3860d783e283\"\u003e\u003ccode\u003ed3cdfdf\u003c/code\u003e\u003c/a\u003e 👹 Feed the hobgoblins (delint).\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/dfc27da53d5b17d1d3b9b04459933f9054a1e3a2\"\u003e\u003ccode\u003edfc27da\u003c/code\u003e\u003c/a\u003e Merge \u003ca href=\"https://github.com/jaraco/skeleton\"\u003ehttps://github.com/jaraco/skeleton\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/dc2a6a50c7b45d357e608b6beafd1339719d2f7c\"\u003e\u003ccode\u003edc2a6a5\u003c/code\u003e\u003c/a\u003e Rename towncrier fragment to PR number\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/a99352800c88bcac801dc3385cb9952f7729e946\"\u003e\u003ccode\u003ea993528\u003c/code\u003e\u003c/a\u003e Add feature news fragment for callable bypass checks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/2257f0ecead9b3b4bdc57615edb47485572b1669\"\u003e\u003ccode\u003e2257f0e\u003c/code\u003e\u003c/a\u003e Inline bypass check normalization call\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/4d5cf8b5ba250ee46ef59fa7cd9760806ee06440\"\u003e\u003ccode\u003e4d5cf8b\u003c/code\u003e\u003c/a\u003e Drop redundant bypass unit tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jaraco/jaraco.functools/compare/v4.4.0...v4.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `lxml` from 6.1.0 to 6.1.1\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.1 (2026-05-18)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe known link attributes in \u003ccode\u003elxml.html.defs.link_attrs\u003c/code\u003e were missing \u003ccode\u003exlink:href\u003c/code\u003e,\nwhich can be used for URL bypass attacks in embedded SVG/MathML/etc. content.\n\u003ca href=\"https://github.com/fedora-python/lxml_html_clean/security/advisories/GHSA-4jhm-jv67-739f\"\u003ehttps://github.com/fedora-python/lxml_html_clean/security/advisories/GHSA-4jhm-jv67-739f\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe Linux wheels use a patched libxslt 1.1.43, fixing CVE-2025-7424 and CVE-2025-11731.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe Windows wheels use libxslt 1.1.45, fixing CVE-2025-7424 and CVE-2025-11731.\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/lxml/lxml/commit/b4a4c595fb875d6f50ae113449834209a364643a\"\u003e\u003ccode\u003eb4a4c59\u003c/code\u003e\u003c/a\u003e Build: Fix build in Py3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/a116dcbe671a792dd65bc73f53a8209e7d7c25ff\"\u003e\u003ccode\u003ea116dcb\u003c/code\u003e\u003c/a\u003e Fix typo: type annotions -\u0026gt; type annotations in PEP 560 comments (\u003ca href=\"https://redirect.github.com/lxml/lxml/issues/504\"\u003eGH-504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/7287a75eedc4cdc247a7937d09013e936c34ace6\"\u003e\u003ccode\u003e7287a75\u003c/code\u003e\u003c/a\u003e Prepare release of 6.1.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/5927a6d5e851845140975d99b65461e255caaab0\"\u003e\u003ccode\u003e5927a6d\u003c/code\u003e\u003c/a\u003e Add missing \u0026quot;xlink:href\u0026quot; to the known HTML link attributes.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/23efeb4910e43e9545b754ce1f138d91ed5cc25c\"\u003e\u003ccode\u003e23efeb4\u003c/code\u003e\u003c/a\u003e Build: Fix build in Py3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/2c0563b3e8c272e62667c7850612347f65d2952e\"\u003e\u003ccode\u003e2c0563b\u003c/code\u003e\u003c/a\u003e Build: Add bug patch for libxslt 1.1.43 and apply it during the static librar...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/8a35fcc3ed53975c762867c3ac8ae318c7960be7\"\u003e\u003ccode\u003e8a35fcc\u003c/code\u003e\u003c/a\u003e Fix doctest in PyPy3.9.\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/lxml/lxml/compare/lxml-6.1.0...lxml-6.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 4.0.0 to 4.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003emake_fence_rule()\u003c/code\u003e factory for configurable fence markers by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/394\"\u003eexecutablebooks/markdown-it-py#394\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🚀 RELEASE v4.2.0 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/395\"\u003eexecutablebooks/markdown-it-py#395\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v4.1.0...v4.2.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v4.1.0...v4.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003e--stdin\u003c/code\u003e option to CLI by \u003ca href=\"https://github.com/mcepl\"\u003e\u003ccode\u003e@​mcepl\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/379\"\u003eexecutablebooks/markdown-it-py#379\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md and copilot-setup-steps workflow by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/380\"\u003eexecutablebooks/markdown-it-py#380\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add typing to Scanner by \u003ca href=\"https://github.com/Alunderin\"\u003e\u003ccode\u003e@​Alunderin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/382\"\u003eexecutablebooks/markdown-it-py#382\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Fix quadratic complexity in \u003ccode\u003efragments_join\u003c/code\u003e / \u003ccode\u003etext_join\u003c/code\u003e by \u003ca href=\"https://github.com/petricevich\"\u003e\u003ccode\u003e@​petricevich\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/389\"\u003eexecutablebooks/markdown-it-py#389\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨Allow plugins to register inline terminator characters by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/391\"\u003eexecutablebooks/markdown-it-py#391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ Add \u003ccode\u003egfm-like2\u003c/code\u003e preset with task lists, alerts, and single-tilde strikethrough by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/388\"\u003eexecutablebooks/markdown-it-py#388\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit hooks by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/392\"\u003eexecutablebooks/markdown-it-py#392\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🚀 RELEASE v4.1.0 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/393\"\u003eexecutablebooks/markdown-it-py#393\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/mcepl\"\u003e\u003ccode\u003e@​mcepl\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/379\"\u003eexecutablebooks/markdown-it-py#379\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/executablebooks/markdown-it-py/pull/380\"\u003eexecutablebooks/markdown-it-py#380\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Alunderin\"\u003e\u003ccode\u003e@​Alunderin\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/382\"\u003eexecutablebooks/markdown-it-py#382\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/petricevich\"\u003e\u003ccode\u003e@​petricevich\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/389\"\u003eexecutablebooks/markdown-it-py#389\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v4.0.0...v4.1.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v4.0.0...v4.1.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/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.2.0 - 2026-05-07\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003emake_fence_rule()\u003c/code\u003e factory for configurable fence markers in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/394\"\u003e#394\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.1.0 - 2025-05-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003egfm-like2\u003c/code\u003e preset with task lists, alerts, and single-tilde strikethrough core plugins in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/388\"\u003e#388\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ Allow plugins to register inline terminator characters in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/391\"\u003e#391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Fix quadratic complexity in \u003ccode\u003efragments_join\u003c/code\u003e / \u003ccode\u003etext_join\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/389\"\u003e#389\u003c/a\u003e, thanks to \u003ca href=\"https://github.com/petricevich\"\u003e\u003ccode\u003e@​petricevich\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Add \u003ccode\u003e--stdin\u003c/code\u003e option to CLI for reading Markdown from standard input in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/379\"\u003e#379\u003c/a\u003e, thanks to \u003ca href=\"https://github.com/mcepl\"\u003e\u003ccode\u003e@​mcepl\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add typing to Scanner in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/382\"\u003e#382\u003c/a\u003e, thanks to \u003ca href=\"https://github.com/Alunderin\"\u003e\u003ccode\u003e@​Alunderin\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v4.0.0...v4.1.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v4.0.0...v4.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/36c5f547144df2d01970a5792d68c71a3380b227\"\u003e\u003ccode\u003e36c5f54\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.2.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/395\"\u003e#395\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/96cf077ba5a6b3b4b2f862db7e0fc532694a72e9\"\u003e\u003ccode\u003e96cf077\u003c/code\u003e\u003c/a\u003e ✨ Add \u003ccode\u003emake_fence_rule()\u003c/code\u003e factory for configurable fence markers (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/394\"\u003e#394\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/3b4ff6ddd368b679643d12debf09e10ef602d4db\"\u003e\u003ccode\u003e3b4ff6d\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.1.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/393\"\u003e#393\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8951f267370b03a26ae88600a6dfc707ea290067\"\u003e\u003ccode\u003e8951f26\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/392\"\u003e#392\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/693bb24063b6c658d60c7c14203ac6470387e3c6\"\u003e\u003ccode\u003e693bb24\u003c/code\u003e\u003c/a\u003e ✨ Add \u003ccode\u003egfm-like2\u003c/code\u003e preset with task lists, alerts, and single-tilde strikethro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/df6fd361099cab7fe0259467c3aaa3f284ec8259\"\u003e\u003ccode\u003edf6fd36\u003c/code\u003e\u003c/a\u003e ✨Allow plugins to register inline terminator characters (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/391\"\u003e#391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/d4ea0ca7f44e3ca86c18a87356502c59e5e49ec3\"\u003e\u003ccode\u003ed4ea0ca\u003c/code\u003e\u003c/a\u003e 👌 Fix quadratic complexity in \u003ccode\u003efragments_join\u003c/code\u003e / \u003ccode\u003etext_join\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/389\"\u003e#389\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/89331476e44c150bc32e2597a5fae4cd15391167\"\u003e\u003ccode\u003e8933147\u003c/code\u003e\u003c/a\u003e 🔧 Add typing to Scanner (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/2f6ae107ba32e9a7bd2d00134d09a78ec805a6a0\"\u003e\u003ccode\u003e2f6ae10\u003c/code\u003e\u003c/a\u003e 🔧 Add AGENTS.md and copilot-setup-steps workflow (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/380\"\u003e#380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/49043e4445d233598fb893bed6949f7b25ae4e27\"\u003e\u003ccode\u003e49043e4\u003c/code\u003e\u003c/a\u003e Add --stdin option to CLI for reading Markdown from standard input (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/379\"\u003e#379\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v4.0.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 `nh3` from 0.3.3 to 0.3.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/messense/nh3/releases\"\u003enh3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.3.6\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate clean_content_tags conflict with tags by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/125\"\u003emessense/nh3#125\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument tag_attribute_values as alternate to attributes by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/126\"\u003emessense/nh3#126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd nh3.escape alias for clean_text by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/127\"\u003emessense/nh3#127\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pyo3 from 0.28.3 to 0.29.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/130\"\u003emessense/nh3#130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpose ammonia's url_relative policy via url_relative kwarg by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/131\"\u003emessense/nh3#131\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/messense/nh3/compare/v0.3.5...v0.3.6\"\u003ehttps://github.com/messense/nh3/compare/v0.3.5...v0.3.6\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev0.3.5\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd usage examples for clean() and Cleaner arguments by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/120\"\u003emessense/nh3#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd doctest coverage for module docstrings and RST files by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/121\"\u003emessense/nh3#121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pyo3 from 0.28.2 to 0.28.3 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/messense/nh3/pull/123\"\u003emessense/nh3#123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tags parameter to clean_text by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/122\"\u003emessense/nh3#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/messense/nh3/compare/v0.3.4...v0.3.5\"\u003ehttps://github.com/messense/nh3/compare/v0.3.4...v0.3.5\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev0.3.4\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump pyo3 from 0.28.1 to 0.28.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/messense/nh3/pull/114\"\u003emessense/nh3#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate rel attribute conflict with link_rel by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/117\"\u003emessense/nh3#117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpose default clean_content_tags as module constant by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/118\"\u003emessense/nh3#118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept frozenset and Mapping in type stubs by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/119\"\u003emessense/nh3#119\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/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/117\"\u003emessense/nh3#117\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/messense/nh3/compare/v0.3.3...v0.3.4\"\u003ehttps://github.com/messense/nh3/compare/v0.3.3...v0.3.4\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/messense/nh3/commit/bea70dfcdd0b9e246f884416dec9c73f9e8923cf\"\u003e\u003ccode\u003ebea70df\u003c/code\u003e\u003c/a\u003e Bump version to 0.3.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/788cee289054b95930034eeaedb3424548302456\"\u003e\u003ccode\u003e788cee2\u003c/code\u003e\u003c/a\u003e Expose ammonia's url_relative policy via url_relative kwarg (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/131\"\u003e#131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/e76a81acc58a98a55992ece96740a1e5a448e222\"\u003e\u003ccode\u003ee76a81a\u003c/code\u003e\u003c/a\u003e Bump pyo3 from 0.28.3 to 0.29.0 (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/130\"\u003e#130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/8ec45a31335b0df9664d22749067fe41a3e369bc\"\u003e\u003ccode\u003e8ec45a3\u003c/code\u003e\u003c/a\u003e Add nh3.escape alias for clean_text (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/a1e022621e862cf27b929b645cb264d2bf8376df\"\u003e\u003ccode\u003ea1e0226\u003c/code\u003e\u003c/a\u003e Document tag_attribute_values as alternate to attributes (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/126\"\u003e#126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/389fb797d5203dab4d0691863bd56ff18136a433\"\u003e\u003ccode\u003e389fb79\u003c/code\u003e\u003c/a\u003e Validate clean_content_tags conflict with tags (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/125\"\u003e#125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/61aad5aaf6c719299b3319e2632c7e96500b0fe6\"\u003e\u003ccode\u003e61aad5a\u003c/code\u003e\u003c/a\u003e Bump uraimo/run-on-arch-action in the github-actions group (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/124\"\u003e#124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/9e78e6af74267c6789c62e98512460990415fb91\"\u003e\u003ccode\u003e9e78e6a\u003c/code\u003e\u003c/a\u003e Bump version to 0.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/5225ec29f6ba74349d158676461fa6081cf804d8\"\u003e\u003ccode\u003e5225ec2\u003c/code\u003e\u003c/a\u003e Add tags parameter to clean_text (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/122\"\u003e#122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/129df5295dd98b263a3f24bd4f9bd5e43a7bb677\"\u003e\u003ccode\u003e129df52\u003c/code\u003e\u003c/a\u003e Bump pyo3 from 0.28.2 to 0.28.3 (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/123\"\u003e#123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/messense/nh3/compare/v0.3.3...v0.3.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.166.0 to 1.168.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/releases\"\u003esemgrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.168.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.168.0\"\u003e1.168.0\u003c/a\u003e - 2026-06-24\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded an experimental \u003ccode\u003e--x-dependency-paths\u003c/code\u003e flag to \u003ccode\u003escan\u003c/code\u003e and \u003ccode\u003eci\u003c/code\u003e that includes the full dependency path(s) for transitive supply-chain findings in \u003ccode\u003e--json\u003c/code\u003e and \u003ccode\u003e--sarif\u003c/code\u003e output. (SC-3547)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMalicious supply chain rules are now labeled \u0026quot;Malicious\u0026quot; instead of \u0026quot;Basic\u0026quot; in the scan analysis summary table. (SC-3504)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esemgrep-core no longer depends on libpcre 8.x; libpcre2 10.x is now the sole regex engine. (drop-libpcre)\u003c/li\u003e\n\u003cli\u003eAliengrep (generic mode) now uses the maintained libpcre2 10.x regular-expression library instead of the deprecated libpcre 8.x. Matching behavior is unchanged. (aliengrep-pcre2)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003emetavariable-regex\u003c/code\u003e and \u003ccode\u003emetavariable-comparison\u003c/code\u003e (\u003ccode\u003ere.match()\u003c/code\u003e) runtimes now use the maintained libpcre2 10.x library instead of the deprecated libpcre 8.x. Matching behavior is unchanged. (eval-generic-pcre2)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.167.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.167.0\"\u003e1.167.0\u003c/a\u003e - 2026-06-17\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for more operators for folding for constant propagation, including subtraction, division, bit ops, bit shifts, comparisons, and more. (const-folding)\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003enosemgrep_disabled\u003c/code\u003e field to the scan configuration so the platform can disable \u003ccode\u003enosemgrep\u003c/code\u003e inline ignore comments org-wide for a scan. (APPEX-1122)\u003c/li\u003e\n\u003cli\u003eSemgrep now skips binary files (images, archives, compiled executables,\netc.) during scanning by default, detected via matching file extensions\nto known file-format magic bytes Pass \u003ccode\u003e--no-exclude-binary-files\u003c/code\u003e to\nscan binary files as before. (ENGINE-2708)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esemgrep ci\u003c/code\u003e with \u003ccode\u003e--sarif\u003c/code\u003e now correctly populates the output's \u003ccode\u003eignores\u003c/code\u003e\nfield with nosemgrep-suppressed findings, in accordance with other output\nformatters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6651\"\u003egh-6651\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated the \u003ccode\u003eocaml-tree-sitter-core\u003c/code\u003e submodule to the latest upstream \u003ccode\u003emain\u003c/code\u003e, providing\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eimproved thread-safety\u003c/li\u003e\n\u003cli\u003ebumps the tree-sitter CLI option used from 0.20.6 to 0.20.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(ocaml-tree-sitter-core-bump)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/blob/v1.168.0/CHANGELOG.md\"\u003esemgrep's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.168.0\"\u003e1.168.0\u003c/a\u003e - 2026-06-24\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded an experimental \u003ccode\u003e--x-dependency-paths\u003c/code\u003e flag to \u003ccode\u003escan\u003c/code\u003e and \u003ccode\u003eci\u003c/code\u003e that includes the full dependency path(s) for transitive supply-chain findings in \u003ccode\u003e--json\u003c/code\u003e and \u003ccode\u003e--sarif\u003c/code\u003e output. (SC-3547)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMalicious supply chain rules are now labeled \u0026quot;Malicious\u0026quot; instead of \u0026quot;Basic\u0026quot; in the scan analysis summary table. (SC-3504)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esemgrep-core no longer depends on libpcre 8.x; libpcre2 10.x is now the sole regex engine. (drop-libpcre)\u003c/li\u003e\n\u003cli\u003eAliengrep (generic mode) now uses the maintained libpcre2 10.x regular-expression library instead of the deprecated libpcre 8.x. Matching behavior is unchanged. (aliengrep-pcre2)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003emetavariable-regex\u003c/code\u003e and \u003ccode\u003emetavariable-comparison\u003c/code\u003e (\u003ccode\u003ere.match()\u003c/code\u003e) runtimes now use the maintained libpcre2 10.x library instead of the deprecated libpcre 8.x. Matching behavior is unchanged. (eval-generic-pcre2)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.167.0\"\u003e1.167.0\u003c/a\u003e - 2026-06-17\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for more operators for folding for constant propagation, including subtraction, division, bit ops, bit shifts, comparisons, and more. (const-folding)\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003enosemgrep_disabled\u003c/code\u003e field to the scan configuration so the platform can disable \u003ccode\u003enosemgrep\u003c/code\u003e inline ignore comments org-wide for a scan. (APPEX-1122)\u003c/li\u003e\n\u003cli\u003eSemgrep now skips binary files (images, archives, compiled executables,\netc.) during scanning by default, detected via matching file extensions\nto known file-format magic bytes Pass \u003ccode\u003e--no-exclude-binary-files\u003c/code\u003e to\nscan binary files as before. (ENGINE-2708)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esemgrep ci\u003c/code\u003e with \u003ccode\u003e--sarif\u003c/code\u003e now correctly populates the output's \u003ccode\u003eignores\u003c/code\u003e\nfield with nosemgrep-suppressed findings, in accordance with other output\nformatters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6651\"\u003egh-6651\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated the \u003ccode\u003eocaml-tree-sitter-core\u003c/code\u003e submodule to the latest upstream \u003ccode\u003emain\u003c/code\u003e, providing\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eimproved thread-safety\u003c/li\u003e\n\u003cli\u003ebumps the tree-sitter CLI option used from 0.20.6 to 0.20.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(ocaml-tree-sitter-core-bump)\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/semgrep/semgrep/commit/3167f9c4edb5ad588c558e311c5a1a03b7f593da\"\u003e\u003ccode\u003e3167f9c\u003c/code\u003e\u003c/a\u003e chore: release 1.168.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/94ac223eb9fade687c2e044936f5ca370dad08c6\"\u003e\u003ccode\u003e94ac223\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6651\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/fd5e60e96c7d66dcdb43d2c1086f003308d21420\"\u003e\u003ccode\u003efd5e60e\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6602\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/acf763e9d16e31e1ab8c5ece9d4ab55e8f2e3ee3\"\u003e\u003ccode\u003eacf763e\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6655\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/b635c1f9e1816b154d2247e1e605532e53f683f6\"\u003e\u003ccode\u003eb635c1f\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6653\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/b0a3bb4eeb0f55e0f4bd30498294b0e68be390fb\"\u003e\u003ccode\u003eb0a3bb4\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6654\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d03aad013dbdac44d934282d744beabef62851e7\"\u003e\u003ccode\u003ed03aad0\u003c/code\u003e\u003c/a\u003e chore(spacegrep): migrate Comment.ml from libpcre 8.x to libpcre2 10.x (semgr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/8855bc510dd2712f23f82211ff5fe65650555262\"\u003e\u003ccode\u003e8855bc5\u003c/code\u003e\u003c/a\u003e refactor(docker): do not create duplicate unused artifacts (semgrep/semgrep-p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/51c6552cec03860634f8e451d0af6e6b3ff76cae\"\u003e\u003ccode\u003e51c6552\u003c/code\u003e\u003c/a\u003e refactor(ci): delegate archive-handling to \u003ccode\u003e{download,upload}\u003c/code\u003e-artifact (semg...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d9d88135564aff166adcc3622911c997fd224989\"\u003e\u003ccode\u003ed9d8813\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6652\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.166.0...v1.168.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/anulum/director-ai/pull/130","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/anulum%2Fdirector-ai/issues/130","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/130/packages"},{"uuid":"4721378013","node_id":"PR_kwDOSexqaM7paipJ","number":84,"state":"closed","title":"chore(deps): bump the python-deps group across 1 directory with 8 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-29T23:37:51.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-22T23:38:26.000Z","updated_at":"2026-06-29T23:37:53.000Z","time_to_close":604765,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-deps","update_count":8,"packages":[{"name":"dash","old_version":"4.2.0","new_version":"4.3.0","repository_url":"https://github.com/plotly/dash"},{"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.15","new_version":"0.15.18","repository_url":"https://github.com/astral-sh/ruff"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"coverage","old_version":"7.14.1","new_version":"7.14.3","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"narwhals","old_version":"2.22.0","new_version":"2.22.1","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"selenium","old_version":"4.44.0","new_version":"4.45.0","repository_url":"https://github.com/SeleniumHQ/Selenium"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-deps group with 8 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [dash](https://github.com/plotly/dash) | `4.2.0` | `4.3.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.15` | `0.15.18` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.6.17` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.1` | `7.14.3` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.22.0` | `2.22.1` |\n| [selenium](https://github.com/SeleniumHQ/Selenium) | `4.44.0` | `4.45.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.3` |\n\n\nUpdates `dash` from 4.2.0 to 4.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/dash/releases\"\u003edash's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.3.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3796\"\u003e#3796\u003c/a\u003e MCP: Add \u003ccode\u003econfigure_mcp_server()\u003c/code\u003e to toggle which content the MCP server exposes (\u003ccode\u003einclude_layout\u003c/code\u003e, \u003ccode\u003einclude_callbacks\u003c/code\u003e, \u003ccode\u003einclude_clientside_callbacks\u003c/code\u003e, \u003ccode\u003einclude_pages\u003c/code\u003e, \u003ccode\u003eexpose_callback_docstrings\u003c/code\u003e). Only the parameters explicitly passed are updated; omitted parameters retain their current value.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3710\"\u003e#3710\u003c/a\u003e MCP: Framework utilities, types for interacting with layout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3711\"\u003e#3711\u003c/a\u003e MCP: \u003ccode\u003eCallbackAdapter\u003c/code\u003e for representing callback-related data in MCP-friendly format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3712\"\u003e#3712\u003c/a\u003e MCP: \u003ccode\u003eResources\u003c/code\u003e for exposing app layout, components, and pages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3731\"\u003e#3731\u003c/a\u003e MCP: Expose callbacks as \u003ccode\u003eTools\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3747\"\u003e#3747\u003c/a\u003e MCP: Support pattern-matching callbacks in Tools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3748\"\u003e#3748\u003c/a\u003e MCP: Format callback results for LLM consumption (rendered graphs, markdown tables)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3749\"\u003e#3749\u003c/a\u003e MCP: \u003ccode\u003eget_dash_component\u003c/code\u003e Tool and callback execution\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3750\"\u003e#3750\u003c/a\u003e MCP: Server routes, \u003ccode\u003emcp_enabled\u003c/code\u003e function decorator, and Streamable HTTP transport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3766\"\u003e#3766\u003c/a\u003e MCP: Support background callbacks in Tools\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3796\"\u003e#3796\u003c/a\u003e MCP: Remove the \u003ccode\u003emcp_expose_docstrings\u003c/code\u003e \u003ccode\u003eDash()\u003c/code\u003e constructor argument; callback docstring exposure is now controlled via \u003ccode\u003econfigure_mcp_server(expose_callback_docstrings=...)\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3817\"\u003e#3817\u003c/a\u003e Fix background callback context serialisation for non-dict request args on the FastAPI and Quart backends. Fixes \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3816\"\u003e#3816\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3805\"\u003e#3805\u003c/a\u003e Fix FastAPI POST routes deadlock caused by middleware consuming request body. Fixes \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3801\"\u003e#3801\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3813\"\u003e#3813\u003c/a\u003e Fix websockets using incorrect path when deployed behind a proxy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3830\"\u003e#3830\u003c/a\u003e MCP: Respond to the Streamable HTTP \u003ccode\u003eGET\u003c/code\u003e (SSE) request with an empty event stream instead of \u003ccode\u003e405 Method Not Allowed\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.3.0rc0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3710\"\u003e#3710\u003c/a\u003e MCP: Framework utilities, types for interacting with layout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3711\"\u003e#3711\u003c/a\u003e MCP: \u003ccode\u003eCallbackAdapter\u003c/code\u003e for representing callback-related data in MCP-friendly format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3712\"\u003e#3712\u003c/a\u003e MCP: \u003ccode\u003eResources\u003c/code\u003e for exposing app layout, components, and pages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3731\"\u003e#3731\u003c/a\u003e MCP: Expose callbacks as \u003ccode\u003eTools\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3747\"\u003e#3747\u003c/a\u003e MCP: Support pattern-matching callbacks in Tools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3748\"\u003e#3748\u003c/a\u003e MCP: Format callback results for LLM consumption (rendered graphs, markdown tables)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3749\"\u003e#3749\u003c/a\u003e MCP: \u003ccode\u003eget_dash_component\u003c/code\u003e Tool and callback execution\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3750\"\u003e#3750\u003c/a\u003e MCP: Server routes, \u003ccode\u003emcp_enabled\u003c/code\u003e function decorator, and Streamable HTTP transport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3766\"\u003e#3766\u003c/a\u003e MCP: Support background callbacks in Tools\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/plotly/dash/blob/dev/CHANGELOG.md\"\u003edash's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[4.3.0] - 2026-06-18\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3796\"\u003e#3796\u003c/a\u003e MCP: Add \u003ccode\u003econfigure_mcp_server()\u003c/code\u003e to toggle which content the MCP server exposes (\u003ccode\u003einclude_layout\u003c/code\u003e, \u003ccode\u003einclude_callbacks\u003c/code\u003e, \u003ccode\u003einclude_clientside_callbacks\u003c/code\u003e, \u003ccode\u003einclude_pages\u003c/code\u003e, \u003ccode\u003eexpose_callback_docstrings\u003c/code\u003e). Only the parameters explicitly passed are updated; omitted parameters retain their current value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3796\"\u003e#3796\u003c/a\u003e MCP: Remove the \u003ccode\u003emcp_expose_docstrings\u003c/code\u003e \u003ccode\u003eDash()\u003c/code\u003e constructor argument; callback docstring exposure is now controlled via \u003ccode\u003econfigure_mcp_server(expose_callback_docstrings=...)\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3817\"\u003e#3817\u003c/a\u003e Fix background callback context serialisation for non-dict request args on the FastAPI and Quart backends. Fixes \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3816\"\u003e#3816\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3805\"\u003e#3805\u003c/a\u003e Fix FastAPI POST routes deadlock caused by middleware consuming request body. Fixes \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3801\"\u003e#3801\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3813\"\u003e#3813\u003c/a\u003e Fix websockets using incorrect path when deployed behind a proxy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3830\"\u003e#3830\u003c/a\u003e MCP: Respond to the Streamable HTTP \u003ccode\u003eGET\u003c/code\u003e (SSE) request with an empty event stream instead of \u003ccode\u003e405 Method Not Allowed\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[4.3.0rc0] - 2026-05-21\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3710\"\u003e#3710\u003c/a\u003e MCP: Framework utilities, types for interacting with layout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3711\"\u003e#3711\u003c/a\u003e MCP: \u003ccode\u003eCallbackAdapter\u003c/code\u003e for representing callback-related data in MCP-friendly format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3712\"\u003e#3712\u003c/a\u003e MCP: \u003ccode\u003eResources\u003c/code\u003e for exposing app layout, components, and pages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3731\"\u003e#3731\u003c/a\u003e MCP: Expose callbacks as \u003ccode\u003eTools\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3747\"\u003e#3747\u003c/a\u003e MCP: Support pattern-matching callbacks in Tools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3748\"\u003e#3748\u003c/a\u003e MCP: Format callback results for LLM consumption (rendered graphs, markdown tables)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3749\"\u003e#3749\u003c/a\u003e MCP: \u003ccode\u003eget_dash_component\u003c/code\u003e Tool and callback execution\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3750\"\u003e#3750\u003c/a\u003e MCP: Server routes, \u003ccode\u003emcp_enabled\u003c/code\u003e function decorator, and Streamable HTTP transport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3766\"\u003e#3766\u003c/a\u003e MCP: Support background callbacks in Tools\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/plotly/dash/commit/d95db60484a36eeeb41c2dd91f01c5f2c0315354\"\u003e\u003ccode\u003ed95db60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3832\"\u003e#3832\u003c/a\u003e from plotly/master-4.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/904e5edfa0ab54a6e7e09f465ae4ca718705ef08\"\u003e\u003ccode\u003e904e5ed\u003c/code\u003e\u003c/a\u003e ci: skip Typing Tests on PRs targeting master\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/b3babe43725ee6afcb0f5d5af82853729628509e\"\u003e\u003ccode\u003eb3babe4\u003c/code\u003e\u003c/a\u003e build artifacts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/0c89b98fb7ce226923d782e39a3646d68f10a072\"\u003e\u003ccode\u003e0c89b98\u003c/code\u003e\u003c/a\u003e Merge branch 'dev' into master-4.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/86d02b47bf796c0ea3ce301d0378808fdbb41ad8\"\u003e\u003ccode\u003e86d02b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3831\"\u003e#3831\u003c/a\u003e from plotly/release/4.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/16e09f2aecea7516a46b3a3ddd590fa98c5c8504\"\u003e\u003ccode\u003e16e09f2\u003c/code\u003e\u003c/a\u003e Version bump of component suites\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/adb6bb2ddc69065b5204e78f5d2e8c26e5020dce\"\u003e\u003ccode\u003eadb6bb2\u003c/code\u003e\u003c/a\u003e bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/27b8c456f7c34306eb0d7c4b4d1770a029d5125d\"\u003e\u003ccode\u003e27b8c45\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3807\"\u003e#3807\u003c/a\u003e from plotly/mcp\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/7fe7a32060b7321566ec0982e7dda58be19fc7dd\"\u003e\u003ccode\u003e7fe7a32\u003c/code\u003e\u003c/a\u003e Fix failing mcp test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/ff4d66dfffec0ed8d97c58e5a6a15bc8bf839d40\"\u003e\u003ccode\u003eff4d66d\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/dev' into mcp\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/dash/compare/v4.2.0...v4.3.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.15 to 0.15.18\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.18\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle nested \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25791\"\u003e#25791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop displaying severity in output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26050\"\u003e#26050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25937\"\u003e#25937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in LSP and playground diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26058\"\u003e#26058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Prevent property docstrings starting with verbs (\u003ccode\u003eD421\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23775\"\u003e#23775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Extend \u003ccode\u003ePYI033\u003c/code\u003e to Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect equivalent numeric mapping keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26009\"\u003e#26009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect mapping keys equivalent to booleans (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25982\"\u003e#25982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect repeated signed and complex dictionary keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26007\"\u003e#26007\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-pyi\u003c/code\u003e] Rename \u003ccode\u003ePYI033\u003c/code\u003e to \u003ccode\u003elegacy-type-comment\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e for call keywords (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25999\"\u003e#25999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline parser recovery context checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26038\"\u003e#26038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch parser keywords as bytes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26037\"\u003e#26037\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMove value parsing out of lexing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25360\"\u003e#25360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender subdiagnostics and secondary annotations as related information (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26011\"\u003e#26011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate fix availability for always-fixable rules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26091\"\u003e#26091\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add fix safety section (\u003ccode\u003eTID252\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17491\"\u003e#17491\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eParser\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003e__debug__\u003c/code\u003e lambda parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26022\"\u003e#26022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_\u003c/code\u003e as a match-pattern target (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25977\"\u003e#25977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject multiple starred names in sequence patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25976\"\u003e#25976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject parenthesized star imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26021\"\u003e#26021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject starred comprehension targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26023\"\u003e#26023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unparenthesized generator expressions in class bases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25978\"\u003e#25978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eyield\u003c/code\u003e expressions after commas (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26024\"\u003e#26024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate function type parameter default order (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25981\"\u003e#25981\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.18\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle nested \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25791\"\u003e#25791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop displaying severity in output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26050\"\u003e#26050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25937\"\u003e#25937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in LSP and playground diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26058\"\u003e#26058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Prevent property docstrings starting with verbs (\u003ccode\u003eD421\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23775\"\u003e#23775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Extend \u003ccode\u003ePYI033\u003c/code\u003e to Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect equivalent numeric mapping keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26009\"\u003e#26009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect mapping keys equivalent to booleans (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25982\"\u003e#25982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect repeated signed and complex dictionary keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26007\"\u003e#26007\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-pyi\u003c/code\u003e] Rename \u003ccode\u003ePYI033\u003c/code\u003e to \u003ccode\u003elegacy-type-comment\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e for call keywords (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25999\"\u003e#25999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline parser recovery context checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26038\"\u003e#26038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch parser keywords as bytes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26037\"\u003e#26037\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMove value parsing out of lexing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25360\"\u003e#25360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender subdiagnostics and secondary annotations as related information (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26011\"\u003e#26011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate fix availability for always-fixable rules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26091\"\u003e#26091\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add fix safety section (\u003ccode\u003eTID252\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17491\"\u003e#17491\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eParser\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003e__debug__\u003c/code\u003e lambda parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26022\"\u003e#26022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_\u003c/code\u003e as a match-pattern target (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25977\"\u003e#25977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject multiple starred names in sequence patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25976\"\u003e#25976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject parenthesized star imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26021\"\u003e#26021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject starred comprehension targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26023\"\u003e#26023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unparenthesized generator expressions in class bases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25978\"\u003e#25978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eyield\u003c/code\u003e expressions after commas (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26024\"\u003e#26024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate function type parameter default order (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25981\"\u003e#25981\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/6686f63404207bfdffe8ab0acb25da72c3432190\"\u003e\u003ccode\u003e6686f63\u003c/code\u003e\u003c/a\u003e Bump 0.15.18 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26135\"\u003e#26135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/efbb7325ff5bb92b0a0c0a0efa0ac94e439ee367\"\u003e\u003ccode\u003eefbb732\u003c/code\u003e\u003c/a\u003e [ty] Suggest keyword-only arguments between variadic parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26134\"\u003e#26134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c256d5f573e66612556061bfd0af527136a23c30\"\u003e\u003ccode\u003ec256d5f\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eAnnotated[Any, ...]\u003c/code\u003e as a class base (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26133\"\u003e#26133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/19a4bea1af5b252798d85696f2f397dae91d303d\"\u003e\u003ccode\u003e19a4bea\u003c/code\u003e\u003c/a\u003e [flake8-pyi] Rename PYI033 to legacy-type-comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1d9866cbd673dc68153ad162465e979c47e62a96\"\u003e\u003ccode\u003e1d9866c\u003c/code\u003e\u003c/a\u003e Bump ecosystem-analyzer commit (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26130\"\u003e#26130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/8656c731dded1e91c0e2713405e43bb2c4eb53bf\"\u003e\u003ccode\u003e8656c73\u003c/code\u003e\u003c/a\u003e [ty] Compact indexed AST node storage (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25998\"\u003e#25998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c17c8d9a060f839c0f9b69c69b85d3802ec5dfdf\"\u003e\u003ccode\u003ec17c8d9\u003c/code\u003e\u003c/a\u003e [ty] Garbage-collect cached constraint sets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26116\"\u003e#26116\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ef0fb8fa264035974e57fda59e2baf196ec1fb9e\"\u003e\u003ccode\u003eef0fb8f\u003c/code\u003e\u003c/a\u003e [ty] Fix bound TypeVar default cycle recovery (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26124\"\u003e#26124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b83c02489df8bccda7313a2cdd8369c9b5d1b002\"\u003e\u003ccode\u003eb83c024\u003c/code\u003e\u003c/a\u003e [flake8-pyi] Extend PYI033 to Python files in preview (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e8a5e38858558a68e94397152fd735cacb6ea3b4\"\u003e\u003ccode\u003ee8a5e38\u003c/code\u003e\u003c/a\u003e Update Rust crate zip to v8 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26078\"\u003e#26078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.15...0.15.18\"\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 `coverage` from 7.14.1 to 7.14.3\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.3 — 2026-06-22\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the default \u003ccode\u003e...\u003c/code\u003e exclusion rule now also matches function bodies\nwhose closing return-type bracket is on its own line (for example, after a\nlong \u003ccode\u003e-\u0026gt; dict[ ... ]\u003c/code\u003e annotation that a formatter has split over multiple\nlines). Closes \u003ccode\u003eissue 2185\u003c/code\u003e\u003cem\u003e, thanks \u003ccode\u003eMengjia Shang \u0026lt;pull 2196_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: On 3.13t, we incorrectly issued \u003ccode\u003eCouldn't import C tracer\u003c/code\u003e errors.\nWe can't import the C tracer because in 7.14.2 we stopped shipping compiled\nwheels for 3.13t. Thanks, \u003ccode\u003eHugo van Kemenade \u0026lt;pull 2203_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2185: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2185\"\u003ecoveragepy/coveragepy#2185\u003c/a\u003e\n.. _pull 2196: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2196\"\u003ecoveragepy/coveragepy#2196\u003c/a\u003e\n.. _pull 2203: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2203\"\u003ecoveragepy/coveragepy#2203\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.14.2 — 2026-06-20\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: some messages were being written to stdout, making \u003ccode\u003ecoverage json -o -\u003c/code\u003e useless for capturing JSON output. Now messages are written to stderr,\nfixing \u003ccode\u003eissue 2197\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003eCoverageData\u003c/code\u003e kept one SQLite connection per thread that recorded\ncoverage, but never closed them when those threads terminated. On long runs\nwith many short-lived threads this leaked one file descriptor per dead\nthread, eventually failing with \u003ccode\u003eOSError: [Errno 24] Too many open files\u003c/code\u003e.\nConnections belonging to terminated threads are now closed and dropped.\nFixes \u003ccode\u003eissue 2192\u003c/code\u003e\u003cem\u003e.  Thanks, \u003ccode\u003eMatthew Lloyd \u0026lt;pull 2193_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: when using sys.monitoring, we were assuming we could use the\n\u003ccode\u003eCOVERAGE_ID\u003c/code\u003e tool id.  But other tools might also assume they could use\nthat id.  Pre-allocated ids don't really make sense, so now we search for a\nusable one instead. Fixes \u003ccode\u003eissue 2187\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFollowing \u003ccode\u003ethe advice of cibuildwheel \u0026lt;no-13t_\u0026gt;\u003c/code\u003e_, we no longer distribute\nwheels for Python 3.13 free-threaded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2187: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2187\"\u003ecoveragepy/coveragepy#2187\u003c/a\u003e\n.. _issue 2192: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2192\"\u003ecoveragepy/coveragepy#2192\u003c/a\u003e\n.. _pull 2193: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2193\"\u003ecoveragepy/coveragepy#2193\u003c/a\u003e\n.. _issue 2197: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2197\"\u003ecoveragepy/coveragepy#2197\u003c/a\u003e\n.. _no-13t: \u003ca href=\"https://py-free-threading.github.io/ci/#building-free-threaded-wheels-with-cibuildwheel\"\u003ehttps://py-free-threading.github.io/ci/#building-free-threaded-wheels-with-cibuildwheel\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-1:\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/22f13eacc2258aee53198b6176db1ca89c32a12e\"\u003e\u003ccode\u003e22f13ea\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2ca4e5fe61a551fc55e48428c8140cb7d325566a\"\u003e\u003ccode\u003e2ca4e5f\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/01d714e5cb457177e999e78fde0c438283f7e4db\"\u003e\u003ccode\u003e01d714e\u003c/code\u003e\u003c/a\u003e docs: add changelog entry for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2203\"\u003e#2203\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f36248d7ba313734d4fcf3d6eab713b5eba2c259\"\u003e\u003ccode\u003ef36248d\u003c/code\u003e\u003c/a\u003e fix: don't emit 'Couldn't import C tracer' warning for 3.13t (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2203\"\u003e#2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/86d73d1c4c60bdb2ea03f982cd4e33c77879ba77\"\u003e\u003ccode\u003e86d73d1\u003c/code\u003e\u003c/a\u003e docs: thanks, Mengjia Shang\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/3d4ae3cb7c77f7521d91200a1e5de13425bbdff4\"\u003e\u003ccode\u003e3d4ae3c\u003c/code\u003e\u003c/a\u003e docs: add the \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2196\"\u003e#2196\u003c/a\u003e pr link to CHANGES\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f4b2b4d35e1b7cd8f33f1ee88d354b0debeeed08\"\u003e\u003ccode\u003ef4b2b4d\u003c/code\u003e\u003c/a\u003e fix: exclude \u003ccode\u003e...\u003c/code\u003e bodies after multi-line return-type annotations (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2185\"\u003e#2185\u003c/a\u003e) (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1980ed0730956f0cc179e8568e1c8ee848f2d42b\"\u003e\u003ccode\u003e1980ed0\u003c/code\u003e\u003c/a\u003e chore: bump sigstore/gh-action-sigstore-python (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2201\"\u003e#2201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bca3217a1dadf35fa1d444722ec9f05dd5819089\"\u003e\u003ccode\u003ebca3217\u003c/code\u003e\u003c/a\u003e build: since we don't ship 3.13t, don't test it\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/77550d83b2f35818a1ca8931289b81d161222031\"\u003e\u003ccode\u003e77550d8\u003c/code\u003e\u003c/a\u003e docs: oops, mismatched pull requests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.1...7.14.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `narwhals` from 2.22.0 to 2.22.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/narwhals-dev/narwhals/releases\"\u003enarwhals's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eNarwhals v2.22.1\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch2\u003e🐞 Bug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: preserve fireducks functionality (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3672\"\u003e#3672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(polars): Backport \u003ccode\u003eis_close\u003c/code\u003e for \u003ccode\u003eDecimal\u003c/code\u003e dtype and \u003ccode\u003ejoin(how={\u0026quot;semi\u0026quot;, \u0026quot;anti\u0026quot;})\u003c/code\u003e on null's (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: Include test data in sdist (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📦 Build system\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: Include test data in sdist (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThank you to all our contributors for making this release possible!\n\u003ca href=\"https://github.com/FBruzzesi\"\u003e\u003ccode\u003e@​FBruzzesi\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/MarcoGorelli\"\u003e\u003ccode\u003e@​MarcoGorelli\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/27bf8dbac2b44d048e26b5c9042fe35575878a4d\"\u003e\u003ccode\u003e27bf8db\u003c/code\u003e\u003c/a\u003e release: Bump version to 2.22.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/125ed1e149a09ebc861c20b8595eb8df42b08b4a\"\u003e\u003ccode\u003e125ed1e\u003c/code\u003e\u003c/a\u003e fix: inplace deprecation warning from pandas in \u003ccode\u003edrop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3675\"\u003e#3675\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/ebd57ae4ec18c2628c1fb9f82f26ed7099caf45f\"\u003e\u003ccode\u003eebd57ae\u003c/code\u003e\u003c/a\u003e fix: preserve fireducks functionality (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3672\"\u003e#3672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/8da0d890a3153182136427844aa4c542b2c86c60\"\u003e\u003ccode\u003e8da0d89\u003c/code\u003e\u003c/a\u003e fix(polars): Backport \u003ccode\u003eis_close\u003c/code\u003e for \u003ccode\u003eDecimal\u003c/code\u003e dtype and `join(how={\u0026quot;semi\u0026quot;, \u0026quot;...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/6db4d00049c8b9f307943cb913209923c25387d4\"\u003e\u003ccode\u003e6db4d00\u003c/code\u003e\u003c/a\u003e fix: Include test data in sdist (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/1eb327f0d80dd1fdc659ef7b49c554e2f3b95a9d\"\u003e\u003ccode\u003e1eb327f\u003c/code\u003e\u003c/a\u003e release: Bump version to 2.22.0 (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3663\"\u003e#3663\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/narwhals-dev/narwhals/compare/v2.22.0...v2.22.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `selenium` from 4.44.0 to 4.45.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/SeleniumHQ/Selenium/releases\"\u003eselenium's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSelenium 4.45.0\u003c/h2\u003e\n\u003ch2\u003eDetailed Changelogs by Component\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG\"\u003eJava\u003c/a\u003e\u003c/strong\u003e     |    \u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES\"\u003ePython\u003c/a\u003e\u003c/strong\u003e     |    \u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG\"\u003eDotNet\u003c/a\u003e\u003c/strong\u003e     |    \u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES\"\u003eRuby\u003c/a\u003e\u003c/strong\u003e     |    \u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/selenium-webdriver/CHANGES.md\"\u003eJavaScript\u003c/a\u003e\u003c/strong\u003e\n\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[build] derive PR diff base from HEAD^1 instead of trunk tip by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17438\"\u003eSeleniumHQ/selenium#17438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] setup trusted publishing from Github to npmrc by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17445\"\u003eSeleniumHQ/selenium#17445\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] generate release notes from previous minor release tag by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17449\"\u003eSeleniumHQ/selenium#17449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] fix when to update lock files during the release process by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17450\"\u003eSeleniumHQ/selenium#17450\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[java] remove deprecated logging classes by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17453\"\u003eSeleniumHQ/selenium#17453\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[grid] Close pre-handshake race in WebSocket proxy by \u003ca href=\"https://github.com/shs96c\"\u003e\u003ccode\u003e@​shs96c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17435\"\u003eSeleniumHQ/selenium#17435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[JavaScript] Correct handling for older browsers and missing casing by \u003ca href=\"https://github.com/AutomatedTester\"\u003e\u003ccode\u003e@​AutomatedTester\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17451\"\u003eSeleniumHQ/selenium#17451\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse pyproject for Python runtime deps lock input by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17452\"\u003eSeleniumHQ/selenium#17452\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rb] deprecate curb http client support by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17443\"\u003eSeleniumHQ/selenium#17443\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[javascript] Migrate find-elements atom from Closure to TypeScript by \u003ca href=\"https://github.com/AutomatedTester\"\u003e\u003ccode\u003e@​AutomatedTester\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17458\"\u003eSeleniumHQ/selenium#17458\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[py] replace rules_python sphinxdocs with local sphinx_docs rule by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17461\"\u003eSeleniumHQ/selenium#17461\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] Configure Renovate dashboard approval by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17464\"\u003eSeleniumHQ/selenium#17464\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[js] update vulnerable dependency with a range by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17466\"\u003eSeleniumHQ/selenium#17466\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] remove duplicated grid ui tests by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17468\"\u003eSeleniumHQ/selenium#17468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] update java graphpql dependency by filtering out bad reference by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17469\"\u003eSeleniumHQ/selenium#17469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rb] upgrade to steep 2.0 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17470\"\u003eSeleniumHQ/selenium#17470\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rust] update dependencies by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17472\"\u003eSeleniumHQ/selenium#17472\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] update GitHub Actions to latest major versions by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17475\"\u003eSeleniumHQ/selenium#17475\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] update dev dependencies by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17474\"\u003eSeleniumHQ/selenium#17474\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] fix template caching by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17476\"\u003eSeleniumHQ/selenium#17476\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] update system.text.json to 8.0.6 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17477\"\u003eSeleniumHQ/selenium#17477\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[js] update dev dependencies by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17479\"\u003eSeleniumHQ/selenium#17479\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] upgrade paket from v9 to v10 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17481\"\u003eSeleniumHQ/selenium#17481\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump bazel version to 9.1 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17480\"\u003eSeleniumHQ/selenium#17480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rust] update zip to v8 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17485\"\u003eSeleniumHQ/selenium#17485\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[js] update eslint to v10 with fixes by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17482\"\u003eSeleniumHQ/selenium#17482\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rb] Update ruby to 3.3.9 by \u003ca href=\"https://github.com/aguspe\"\u003e\u003ccode\u003e@​aguspe\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17484\"\u003eSeleniumHQ/selenium#17484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] include snupkg files when packaging things up and allow the use of sourcelink by \u003ca href=\"https://github.com/AutomatedTester\"\u003e\u003ccode\u003e@​AutomatedTester\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17467\"\u003eSeleniumHQ/selenium#17467\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] update download-artifact to v8 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17493\"\u003eSeleniumHQ/selenium#17493\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] run format against slnx instead of looping csproj by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17483\"\u003eSeleniumHQ/selenium#17483\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump low-risk Bazel module dependencies by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17494\"\u003eSeleniumHQ/selenium#17494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rust] update reqwest to 0.13 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17488\"\u003eSeleniumHQ/selenium#17488\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] [build] Fix remote linkage in SourceLink by \u003ca href=\"https://github.com/nvborisenko\"\u003e\u003ccode\u003e@​nvborisenko\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17495\"\u003eSeleniumHQ/selenium#17495\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] remove renovate update requests pending work done in \u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17427\"\u003e#17427\u003c/a\u003e by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17498\"\u003eSeleniumHQ/selenium#17498\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] [build] Support deterministic build output by \u003ca href=\"https://github.com/nvborisenko\"\u003e\u003ccode\u003e@​nvborisenko\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17497\"\u003eSeleniumHQ/selenium#17497\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump ruby versions to latest patch releases by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17496\"\u003eSeleniumHQ/selenium#17496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[js] remove npm dependency by using bazel for everything by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17499\"\u003eSeleniumHQ/selenium#17499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump rules_jvm_external by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17501\"\u003eSeleniumHQ/selenium#17501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump rules_closure version by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17500\"\u003eSeleniumHQ/selenium#17500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] clarify dependency pin and update tasks by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17463\"\u003eSeleniumHQ/selenium#17463\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/SeleniumHQ/selenium/commit/cd6a3cdfca6970f62e5bc8344109d0fe0e2af05e\"\u003e\u003ccode\u003ecd6a3cd\u003c/code\u003e\u003c/a\u003e [build] Prepare for release of selenium-4.45.0 (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17680\"\u003e#17680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/15fad06cba4d0eb577bf3891954ecaf81e9a11d8\"\u003e\u003ccode\u003e15fad06\u003c/code\u003e\u003c/a\u003e [build] Automated Browser Version Update (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17679\"\u003e#17679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/cb9b6fdbabdc1ed68a8bdbf31a4222c0396fe2fd\"\u003e\u003ccode\u003ecb9b6fd\u003c/code\u003e\u003c/a\u003e [grid] Add support Redis-backed for SessionQueue (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17678\"\u003e#17678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/18bb1d97d3db196522aa9b3873a350dc40d3ccb8\"\u003e\u003ccode\u003e18bb1d9\u003c/code\u003e\u003c/a\u003e [py] terminate driver service process when start() fails to connect (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17651\"\u003e#17651\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/b3164ef7d071b5add6750d686ffbae1b936cadf0\"\u003e\u003ccode\u003eb3164ef\u003c/code\u003e\u003c/a\u003e [grid] add HtmlUnit browser logo to Grid UI (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17656\"\u003e#17656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/bb741bd07b1c5e36054328627903b4507eaca9f5\"\u003e\u003ccode\u003ebb741bd\u003c/code\u003e\u003c/a\u003e [build] Automated Browser Version Update (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17658\"\u003e#17658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/887237c468022cb5e4637aa98404fac2de0c8d23\"\u003e\u003ccode\u003e887237c\u003c/code\u003e\u003c/a\u003e [py] translate continue_request/continue_response kwargs to BiDi wire format ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/f53de51c263c5ab0e598253a46286777a794ede0\"\u003e\u003ccode\u003ef53de51\u003c/code\u003e\u003c/a\u003e [rb] run minimize test on linux now that \u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17644\"\u003e#17644\u003c/a\u003e fixed fluxbox startup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/3f37cce5cd7be6500ba90f44c994e140e27e3108\"\u003e\u003ccode\u003e3f37cce\u003c/code\u003e\u003c/a\u003e [rb] set window state before each window test instead of resetting driver\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/2bfb9904f65649d7bcb6b4a678ac37c9909d2d22\"\u003e\u003ccode\u003e2bfb990\u003c/code\u003e\u003c/a\u003e [rb] skip Safari double_click action tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/SeleniumHQ/Selenium/compare/selenium-4.44.0...selenium-4.45.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tqdm` from 4.67.3 to 4.68.3\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.3 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eutils\u003c/code\u003e: delay \u003ccode\u003eos.get_terminal_size\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1763\"\u003e#1763\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eautonotebook\u003c/code\u003e: support QtConsole, Spyder, JupyterLite (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1763\"\u003e#1763\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1628\"\u003e#1628\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1559\"\u003e#1559\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1283\"\u003e#1283\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1098\"\u003e#1098\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/512\"\u003e#512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eminor docs updates\n\u003cul\u003e\n\u003cli\u003efix typo (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1762\"\u003e#1762\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euse \u003ccode\u003egit-fame\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003emisc minor framework updates\n\u003cul\u003e\n\u003cli\u003efix \u0026amp; update CI build\u003c/li\u003e\n\u003cli\u003epre-commit: add docs \u0026amp; metadata generation\u003c/li\u003e\n\u003cli\u003emove \u003ccode\u003etox.ini\u003c/code\u003e -\u0026gt; \u003ccode\u003epyproject.toml\u003c/code\u003e, move \u003ccode\u003etox-gh-actions\u003c/code\u003e -\u0026gt; \u003ccode\u003etox-gh\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eadd Python 3.14, drop 3.7 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.68.2 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003erevert accidental change to \u003ccode\u003eascii\u003c/code\u003e default (fixes \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eUnicodeEncodeError: 'charmap' codec can't encode characters in position 6-7: character maps to \u0026lt;undefined\u0026gt;\u003c/code\u003e can be fixed by installing \u003ccode\u003etqdm!=4.68.0,!=4.68.1\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003emisc docs updates\n\u003cul\u003e\n\u003cli\u003efix links\u003c/li\u003e\n\u003cli\u003ereplace stray \u003ccode\u003erst\u003c/code\u003e -\u0026gt; \u003ccode\u003emd\u003c/code\u003e syntax\u003c/li\u003e\n\u003cli\u003econsistent \u0026quot;progress bar\u0026quot; terminology (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1737\"\u003e#1737\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003etests: fix coverage (fixes \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.68.1 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eset name of monitor thread (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1669\"\u003e#1669\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1752\"\u003e#1752\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix monitor thread \u003ccode\u003eatexit\u003c/code\u003e deadlock (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1751\"\u003e#1751\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/528\"\u003e#528\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/627\"\u003e#627\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1435\"\u003e#1435\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1564\"\u003e#1564\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: minor copyediting\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.68.0 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eutils\u003c/code\u003e: simplify terminal size detection (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econtrib\u003c/code\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eitertools\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eadd \u003ccode\u003echain\u003c/code\u003e, \u003ccode\u003epermutations\u003c/code\u003e, \u003ccode\u003ecombinations\u003c/code\u003e, \u003ccode\u003ecombinations_with_replacement\u003c/code\u003e, \u003ccode\u003ebatched\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eadd \u003ccode\u003eproduct(repeat=1)\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1428\"\u003e#1428\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003ediscord\u003c/code\u003e, \u003ccode\u003etelegram\u003c/code\u003e error handling\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003ediscord\u003c/code\u003e, \u003ccode\u003eslack\u003c/code\u003e, \u003ccode\u003etelegram\u003c/code\u003e format for \u003ccode\u003etotal=None\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003esoft-deprecate \u003ccode\u003etqdm.utils.envwrap\u003c/code\u003e -\u0026gt; \u003ca href=\"https://github.com/tqdm/envwrap\"\u003e\u003ccode\u003eenvwrap\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebenchmarks: fix \u003ccode\u003easv\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003emisc linting\u003c/li\u003e\n\u003cli\u003emisc framework updates\n\u003cul\u003e\n\u003cli\u003eCI: migrate manual job to \u003ccode\u003epre-commit.ci\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebump workflow actions \u0026amp; pre-commit hooks\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/9aff6090b6fa98c88a2dbff8bd9e2a68d9a99c1b\"\u003e\u003ccode\u003e9aff609\u003c/code\u003e\u003c/a\u003e bump version, merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1763\"\u003e#1763\u003c/a\u003e from tqdm/jupyterlite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/9872f80e0d9ceb8377b45c714ec8f6ae66bf9ef9\"\u003e\u003ccode\u003e9872f80\u003c/code\u003e\u003c/a\u003e drop date from snap version str to fix pydantic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/b82933405f6dc19dd8f667be57fd2058a00f75c7\"\u003e\u003ccode\u003eb829334\u003c/code\u003e\u003c/a\u003e support QtConsole, Spyder, JupyterLite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/6fa4867b27dd4852204aa13f73300db41791cd46\"\u003e\u003ccode\u003e6fa4867\u003c/code\u003e\u003c/a\u003e delay os.get_terminal_size\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/748e107287c9a66e3a366cd5366bd9a8bcbe33ae\"\u003e\u003ccode\u003e748e107\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/e6e29eb7a191d366d21b93817c6de3857b664367\"\u003e\u003ccode\u003ee6e29eb\u003c/code\u003e\u003c/a\u003e move tox.ini -\u0026gt; pyproject.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/617e4faf67d6cc59d42e3b2665b0c1199a665db4\"\u003e\u003ccode\u003e617e4fa\u003c/code\u003e\u003c/a\u003e tox-gh-actions -\u0026gt; tox-gh\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/c49c50d83124e514d2b6bb549661ff1e2fa44504\"\u003e\u003ccode\u003ec49c50d\u003c/code\u003e\u003c/a\u003e add python 3.14, drop python 3.7 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/fa2bcdb4ad68d4e95bd49460d8d590451cf478ba\"\u003e\u003ccode\u003efa2bcdb\u003c/code\u003e\u003c/a\u003e pre-commit: tqdm.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/1ec798811a960294d74d42d35b6614e3273e9fe3\"\u003e\u003ccode\u003e1ec7988\u003c/code\u003e\u003c/a\u003e auto git-fame\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tqdm/tqdm/compare/v4.67.3...v4.68.3\"\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/BrunoFurlanetto/nirspy/pull/84","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoFurlanetto%2Fnirspy/issues/84","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/84/packages"},{"uuid":"4713066524","node_id":"PR_kwDOSzORUs7o-9Bn","number":13,"state":"open","title":"deps(backend): bump the patch-and-minor group across 1 directory with 7 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-06-22T03:11:15.000Z","updated_at":"2026-06-22T03:11:16.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"patch-and-minor","update_count":7,"packages":[{"name":"pyjwt","old_version":"2.12.0","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pymysql","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/PyMySQL/PyMySQL"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"faker","old_version":"40.13.0","new_version":"40.23.0","repository_url":"https://github.com/joke2k/faker"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"}],"path":null,"ecosystem":"pip"},"body":"Bumps the patch-and-minor group with 7 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.0` | `2.13.0` |\n| [pymysql](https://github.com/PyMySQL/PyMySQL) | `1.1.2` | `1.2.0` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.6.17` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [faker](https://github.com/joke2k/faker) | `40.13.0` | `40.23.0` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n\n\nUpdates `pyjwt` from 2.12.0 to 2.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.0\u003c/h2\u003e\n\u003ch1\u003ePyJWT 2.13.0 — Security Release\u003c/h1\u003e\n\u003cp\u003eThis release bundles five security fixes plus three additional hardening / spec-compliance changes. We recommend all users upgrade.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\"\u003e\u003ccode\u003eGHSA-xgmm-8j9v-c9wx\u003c/code\u003e\u003c/a\u003e — JWK JSON accepted as HMAC secret (algorithm confusion).\u003c/strong\u003e \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e previously rejected PEM- and SSH-formatted asymmetric keys but did not catch a JWK passed as a raw JSON string. In a verifier configured with both symmetric and asymmetric algorithms in \u003ccode\u003ealgorithms=[…]\u003c/code\u003e and a raw-JSON JWK as the key, an attacker could forge HS256 tokens using the JWK text as the HMAC secret. The guard has been extended to reject any JWK-shaped JSON. \u003cem\u003eReported by \u003ca href=\"https://github.com/aradona91\"\u003e\u003ccode\u003e@​aradona91\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\"\u003e\u003ccode\u003eGHSA-jq35-7prp-9v3f\u003c/code\u003e\u003c/a\u003e — Algorithm allow-list bypass with \u003ccode\u003ePyJWK\u003c/code\u003e / \u003ccode\u003ePyJWKClient\u003c/code\u003e.\u003c/strong\u003e When verifying with a \u003ccode\u003ePyJWK\u003c/code\u003e, the caller's \u003ccode\u003ealgorithms=[…]\u003c/code\u003e allow-list was checked against the token header \u003ccode\u003ealg\u003c/code\u003e as a string only; actual verification used the algorithm bound to the \u003ccode\u003ePyJWK\u003c/code\u003e. An attacker who controlled a registered JWKS key could sign with one algorithm and advertise another on the header. PyJWT now requires the token header \u003ccode\u003ealg\u003c/code\u003e to match the \u003ccode\u003ePyJWK\u003c/code\u003e's algorithm before verification. \u003cem\u003eReported by \u003ca href=\"https://github.com/sushi-gif\"\u003e\u003ccode\u003e@​sushi-gif\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\"\u003e\u003ccode\u003eGHSA-w7vc-732c-9m39\u003c/code\u003e\u003c/a\u003e — DoS via base64 decode of unused payload segment when \u003ccode\u003eb64=false\u003c/code\u003e.\u003c/strong\u003e For detached-payload JWS (\u003ccode\u003eb64=false\u003c/code\u003e), the compact-form payload segment was base64-decoded before being discarded in favor of the caller-supplied \u003ccode\u003edetached_payload\u003c/code\u003e. An attacker could inflate the unused segment to force CPU + memory cost without holding a valid signature. The segment is now required to be empty per RFC 7515 Appendix F, and is no longer decoded. \u003cem\u003eReported by \u003ca href=\"https://github.com/thesmartshadow\"\u003e\u003ccode\u003e@​thesmartshadow\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\"\u003e\u003ccode\u003eGHSA-993g-76c3-p5m4\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e accepts non-HTTP(S) URIs.\u003c/strong\u003e \u003ccode\u003ePyJWKClient.fetch_data\u003c/code\u003e passed its URI to \u003ccode\u003eurllib.request.urlopen\u003c/code\u003e, which by default also handles \u003ccode\u003efile://\u003c/code\u003e, \u003ccode\u003eftp://\u003c/code\u003e, and \u003ccode\u003edata:\u003c/code\u003e schemes. An application that fed an attacker-influenced URI into \u003ccode\u003ePyJWKClient\u003c/code\u003e could be coerced into reading local files or reaching other unintended schemes. \u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects any URI whose scheme isn't \u003ccode\u003ehttp\u003c/code\u003e or \u003ccode\u003ehttps\u003c/code\u003e. \u003cem\u003eReported by \u003ca href=\"https://github.com/KEIJOT\"\u003e\u003ccode\u003e@​KEIJOT\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\"\u003e\u003ccode\u003eGHSA-fhv5-28vv-h8m8\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e cache wiped on fetch error.\u003c/strong\u003e A \u003ccode\u003efinally\u003c/code\u003e-block \u003ccode\u003eput(jwk_set=None)\u003c/code\u003e cleared the JWK Set cache whenever a fetch raised, turning a transient JWKS-endpoint outage into application-wide auth failure. The cache write was moved into the success path; transient errors no longer evict valid cached keys. \u003cem\u003eReported by \u003ca href=\"https://github.com/eddieran\"\u003e\u003ccode\u003e@​eddieran\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty HMAC keys outright in \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e with \u003ccode\u003eInvalidKeyError\u003c/code\u003e instead of accepting them with only a warning. Defends against the \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e footgun. \u003cem\u003eThanks to \u003ca href=\"https://github.com/SnailSploit\"\u003e\u003ccode\u003e@​SnailSploit\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/spartan8806\"\u003e\u003ccode\u003e@​spartan8806\u003c/code\u003e\u003c/a\u003e for the reports.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eForward per-call \u003ccode\u003eoptions\u003c/code\u003e (including \u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e) from \u003ccode\u003ePyJWT.decode\u003c/code\u003e through to \u003ccode\u003ePyJWS._verify_signature\u003c/code\u003e. The option was previously silently dropped between the two layers, so it only took effect when set on the \u003ccode\u003ePyJWT\u003c/code\u003e instance. \u003cem\u003eThanks to \u003ca href=\"https://github.com/WLUB\"\u003e\u003ccode\u003e@​WLUB\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRFC 7797 §3 compliance for \u003ccode\u003eb64=false\u003c/code\u003e:\u003c/strong\u003e the encoder now auto-adds \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e to \u003ccode\u003ecrit\u003c/code\u003e, and the decoder rejects tokens that set \u003ccode\u003eb64=false\u003c/code\u003e without listing it in \u003ccode\u003ecrit\u003c/code\u003e. \u003cem\u003eThanks to \u003ca href=\"https://github.com/MachineLearning-Nerd\"\u003e\u003ccode\u003e@​MachineLearning-Nerd\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups, by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1152\"\u003e#1152\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eUpgrade notes\u003c/h2\u003e\n\u003cp\u003eMost fixes are invisible to correctly-configured callers. A few behavioral changes you may encounter:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEmpty HMAC keys now raise.\u003c/strong\u003e If your app passed \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e or \u003ccode\u003eb\u0026quot;\u0026quot;\u003c/code\u003e as a secret (often via a missing env var, e.g. \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e), \u003ccode\u003eencode\u003c/code\u003e/\u003ccode\u003edecode\u003c/code\u003e will now raise \u003ccode\u003eInvalidKeyError\u003c/code\u003e. This is the intended behavior — fix the configuration.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWK\u003c/code\u003e decoding now requires the token's \u003ccode\u003ealg\u003c/code\u003e to match the JWK's algorithm.\u003c/strong\u003e Previously a mismatch was silently honored if the header \u003ccode\u003ealg\u003c/code\u003e appeared in the allow-list. Tokens that relied on this mismatch will now fail with \u003ccode\u003eInvalidAlgorithmError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects non-HTTP(S) URIs at construction time.\u003c/strong\u003e Tests or dev environments that fetched JWKS from \u003ccode\u003efile://\u003c/code\u003e URIs need to switch to a local HTTP server or load the JWKS by other means (e.g. construct \u003ccode\u003ePyJWKSet.from_dict(...)\u003c/code\u003e directly).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eb64=false\u003c/code\u003e tokens are now strictly RFC 7515 / 7797 compliant.\u003c/strong\u003e Tokens with a non-empty compact-form payload segment, or that omit \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e from \u003ccode\u003ecrit\u003c/code\u003e, will be rejected. PyJWT-produced tokens always satisfy both invariants, so round-trips through PyJWT are unaffected.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e set per-call now takes effect.\u003c/strong\u003e Callers who passed \u003ccode\u003eoptions={\u0026quot;enforce_minimum_key_length\u0026quot;: True}\u003c/code\u003e to \u003ccode\u003ejwt.decode()\u003c/code\u003e previously got no enforcement; they will now get \u003ccode\u003eInvalidKeyError\u003c/code\u003e on undersized keys, as documented.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.12.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd typing_extensions dependency for Python \u0026lt; 3.11 by \u003ca href=\"https://github.com/jpadilla\"\u003e\u003ccode\u003e@​jpadilla\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1151\"\u003ejpadilla/pyjwt#1151\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.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/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.13.0 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Reject JWK JSON documents passed as raw HMAC secrets in\n  ``HMACAlgorithm.prepare_key`` to close an algorithm-confusion gap that\n  the existing PEM/SSH guard did not cover. Reported by @aradona91 in\n  `GHSA-xgmm-8j9v-c9wx \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\u0026gt;`__.\n- Bind the JWT header ``alg`` to ``PyJWK.algorithm_name`` during\n  verification so the caller's ``algorithms=[...]`` allow-list cannot be\n  bypassed when decoding with a ``PyJWK`` / ``PyJWKClient`` key. Reported\n  by @sushi-gif in `GHSA-jq35-7prp-9v3f \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\u0026gt;`__.\n- Reject non-``http(s)`` URI schemes in ``PyJWKClient`` so attacker-\n  influenced URIs cannot read local files or reach unintended schemes via\n  urllib's default ``file://`` / ``ftp://`` / ``data:`` handlers. Reported\n  by @KEIJOT in `GHSA-993g-76c3-p5m4 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\u0026gt;`__.\n- Preserve the cached JWK Set on fetch errors in ``PyJWKClient.fetch_data``.\n  The previous ``finally``-block ``put(None)`` pattern cleared the cache\n  on any transient outage, turning one bad JWKS request into application-\n  wide auth failure. Reported by @eddieran in `GHSA-fhv5-28vv-h8m8 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\u0026gt;`__.\n- Skip the unconditional base64 decode of the compact-form payload segment\n  when ``b64=false`` is set in the protected header, and require that\n  segment to be empty (RFC 7515 Appendix F detached form). Closes an\n  unauthenticated DoS amplifier. Reported by @thesmartshadow in\n  `GHSA-w7vc-732c-9m39 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\u0026gt;`__.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Reject empty HMAC keys outright in ``HMACAlgorithm.prepare_key`` with\n  ``InvalidKeyError`` instead of accepting them with only a warning.\n  Thanks to @SnailSploit and @spartan8806 for independently flagging the\n  footgun.\n- Forward per-call ``options`` (including ``enforce_minimum_key_length``)\n  from ``PyJWT.decode`` through to ``PyJWS._verify_signature`` so the\n  option actually takes effect when set at the call site rather than only\n  on the ``PyJWT`` instance. Thanks to @WLUB for the report.\n- RFC 7797 §3 compliance for ``b64=false``: the encoder now auto-adds\n  ``\u0026amp;quot;b64\u0026amp;quot;`` to the ``crit`` header parameter, and the decoder rejects\n  tokens that set ``b64=false`` without listing it in ``crit``. Thanks to\n  @MachineLearning-Nerd for the report.\n\nChanged\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1152](https://github.com/jpadilla/pyjwt/issues/1152) \u0026amp;lt;https://github.com/jpadilla/pyjwt/pull/1152\u0026amp;gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ccode\u003ev2.12.1 \u0026amp;lt;https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u0026amp;gt;\u003c/code\u003e__\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/7144e4534c34810f4525dc4578a32addd8212cff\"\u003e\u003ccode\u003e7144e45\u003c/code\u003e\u003c/a\u003e Apply ruff format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/d2f4bec4963897c0ef96ef64a875894f2c8542ab\"\u003e\u003ccode\u003ed2f4bec\u003c/code\u003e\u003c/a\u003e Restore \u003ccode\u003ecast()\u003c/code\u003e calls with cross-version \u003ccode\u003etype: ignore\u003c/code\u003e for \u003ccode\u003eprepare_key\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/22f478cebddd8294259c30f037ecb92b0b348774\"\u003e\u003ccode\u003e22f478c\u003c/code\u003e\u003c/a\u003e Remove redundant casts in \u003ccode\u003eRSAAlgorithm.prepare_key\u003c/code\u003e and `ECAlgorithm.prepare...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/95791b1759b8aa4f2203575d344d5c78564cdc81\"\u003e\u003ccode\u003e95791b1\u003c/code\u003e\u003c/a\u003e Bundle security fixes and hardening into 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/dcc27a9d3182a2349c30b160758785c6ce7a6508\"\u003e\u003ccode\u003edcc27a9\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1155\"\u003e#1155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/9d08a9a1896845ed8eaf88e6f6ac61e5800c3e7a\"\u003e\u003ccode\u003e9d08a9a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1146\"\u003e#1146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/b87c10014d4109f0214fea188d00faaaf8a80e64\"\u003e\u003ccode\u003eb87c100\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5 to 6 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1154\"\u003e#1154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/40e3147eb5f790d8d041772e5fc00728a176c812\"\u003e\u003ccode\u003e40e3147\u003c/code\u003e\u003c/a\u003e Migrate development extras to dependency groups (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1152\"\u003e#1152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/a4e1a3d1218b01c5806420b8f16d9308ac4adc30\"\u003e\u003ccode\u003ea4e1a3d\u003c/code\u003e\u003c/a\u003e Add typing_extensions dependency for Python \u0026lt; 3.11 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.0...2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymysql` 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/PyMySQL/PyMySQL/releases\"\u003epymysql'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\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/PyMySQL/PyMySQL/pull/1232\"\u003ePyMySQL/PyMySQL#1232\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReorganize TLS options: implement PREFERRED/REQUIRED SSL mode behavior by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1234\"\u003ePyMySQL/PyMySQL#1234\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport MySQL 8 row/column alias syntax in \u003ccode\u003eexecutemany\u003c/code\u003e INSERT regex by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1235\"\u003ePyMySQL/PyMySQL#1235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpose SQLSTATE on MySQL protocol exceptions without changing exception formatting by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1236\"\u003ePyMySQL/PyMySQL#1236\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject non-finite \u003ccode\u003edecimal.Decimal\u003c/code\u003e query parameters (\u003ccode\u003eNaN\u003c/code\u003e, \u003ccode\u003esNaN\u003c/code\u003e, \u003ccode\u003e±Infinity\u003c/code\u003e) by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1237\"\u003ePyMySQL/PyMySQL#1237\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update outdated requirements and reference links by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1239\"\u003ePyMySQL/PyMySQL#1239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare CHANGELOG for v1.2.0 release from v1.1.3 changes by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1238\"\u003ePyMySQL/PyMySQL#1238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edeprecate \u003ccode\u003edb\u003c/code\u003e and \u003ccode\u003epasswd\u003c/code\u003e again by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1240\"\u003ePyMySQL/PyMySQL#1240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edeprecate \u003ccode\u003ereconnect\u003c/code\u003e in \u003ccode\u003eConnection.ping()\u003c/code\u003e by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1241\"\u003ePyMySQL/PyMySQL#1241\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecate \u003ccode\u003eConnection.set_charset()\u003c/code\u003e at runtime and document warning behavior by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1243\"\u003ePyMySQL/PyMySQL#1243\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/PyMySQL/PyMySQL/pull/1244\"\u003ePyMySQL/PyMySQL#1244\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/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1234\"\u003ePyMySQL/PyMySQL#1234\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyMySQL/PyMySQL/compare/v1.1.3...v1.2.0\"\u003ehttps://github.com/PyMySQL/PyMySQL/compare/v1.1.3...v1.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.1.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ecallproc: escape procname by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1225\"\u003ePyMySQL/PyMySQL#1225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003euse ubuntu-slim and dependabot by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1226\"\u003ePyMySQL/PyMySQL#1226\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/PyMySQL/PyMySQL/pull/1227\"\u003ePyMySQL/PyMySQL#1227\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump codecov/codecov-action 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/PyMySQL/PyMySQL/pull/1228\"\u003ePyMySQL/PyMySQL#1228\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/PyMySQL/PyMySQL/pull/1229\"\u003ePyMySQL/PyMySQL#1229\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease 1.1.3 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1230\"\u003ePyMySQL/PyMySQL#1230\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/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1227\"\u003ePyMySQL/PyMySQL#1227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyMySQL/PyMySQL/compare/v1.1.2...v1.1.3\"\u003ehttps://github.com/PyMySQL/PyMySQL/compare/v1.1.2...v1.1.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/PyMySQL/PyMySQL/blob/main/CHANGELOG.md\"\u003epymysql's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0\u003c/h2\u003e\n\u003cp\u003eRelease date: 2026-05-19\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eConnection.ping()\u003c/code\u003e change the default to not reconnect and deprecate \u003ccode\u003ereconnect\u003c/code\u003e argument.\nCreate a new connection if you want to reconnect. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1241\"\u003e#1241\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eError classes in Cursor class are removed. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003econnect()\u003c/code\u003e arguments \u003ccode\u003edb\u003c/code\u003e and \u003ccode\u003epasswd\u003c/code\u003e now emit DeprecationWarning.\nUse \u003ccode\u003edatabase\u003c/code\u003e and \u003ccode\u003epassword\u003c/code\u003e instead. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReorganize TLS connection behavior.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePyMySQL uses TLS by default when server supports it.\nUse \u003ccode\u003essl_disabled=True\u003c/code\u003e to prohibit SSL. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen \u003ccode\u003essl_verify_cert=True\u003c/code\u003e, \u003ccode\u003essl_verify_identity=True\u003c/code\u003e, an \u003ccode\u003essl.SSLContext\u003c/code\u003e is passed,\nor when any other SSL option is configured, the connection \u003cstrong\u003erequires\u003c/strong\u003e SSL and raises\n\u003ccode\u003eOperationalError\u003c/code\u003e (CR_SSL_CONNECTION_ERROR) if the server doesn't support it. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1234\"\u003e#1234\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport MySQL 8 row/column alias syntax in \u003ccode\u003eexecutemany\u003c/code\u003e INSERT regex. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose SQLSTATE on MySQL protocol exceptions without changing exception formatting. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1236\"\u003e#1236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject non-finite \u003ccode\u003edecimal.Decimal\u003c/code\u003e query parameters (\u003ccode\u003eNaN\u003c/code\u003e, \u003ccode\u003esNaN\u003c/code\u003e, \u003ccode\u003e±Infinity\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1237\"\u003e#1237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eConnection.set_charset(charset)\u003c/code\u003e now emits \u003ccode\u003eDeprecationWarning\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.1.3\u003c/h2\u003e\n\u003cp\u003eRelease date: 2026-05-01\u003c/p\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eCursor.callproc()\u003c/code\u003e didn't escape procedure name. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1206\"\u003e#1206\u003c/a\u003e)\nThere was a possibility of SQL injection when calling a procedure with a string received from an untrusted source as the procedure name.\u003c/p\u003e\n\u003cp\u003eNOTICE: This change may cause backward compatibility issues. If you specified a procedure name like \u003ccode\u003e\u0026quot;dbname.funcname\u0026quot;\u003c/code\u003e, the previous version called \u003ccode\u003eCALL dbname.funcname\u003c/code\u003e, but from this version, it will call \u003ccode\u003eCALL `dbname.funcname` \u003c/code\u003e so you cannot specify procedure name with database name anymore.\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/PyMySQL/PyMySQL/commit/0f1c324a6b73e34810af3e584f6d32554604488a\"\u003e\u003ccode\u003e0f1c324\u003c/code\u003e\u003c/a\u003e use ubuntu-latest for pypi publishing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/53b16b22f0fefc64ccf4606f20c87bedcceb1cac\"\u003e\u003ccode\u003e53b16b2\u003c/code\u003e\u003c/a\u003e Release v1.2.0 (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1244\"\u003e#1244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/637fe7e6b2b1bc6effefc53d0faccfe3d5036ea5\"\u003e\u003ccode\u003e637fe7e\u003c/code\u003e\u003c/a\u003e Deprecate \u003ccode\u003eConnection.set_charset()\u003c/code\u003e at runtime and document warning behavior...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/23ca04a357a042db4188adefd04031c205837927\"\u003e\u003ccode\u003e23ca04a\u003c/code\u003e\u003c/a\u003e add AGENTS.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/7349a44e2b264395bd2d78fe3c9b7fdb26a7e740\"\u003e\u003ccode\u003e7349a44\u003c/code\u003e\u003c/a\u003e deprecate \u003ccode\u003ereconnect\u003c/code\u003e in \u003ccode\u003eConnection.ping()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1241\"\u003e#1241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/ad5c50c254925caf24dbc06832a69f5c5c5ec76b\"\u003e\u003ccode\u003ead5c50c\u003c/code\u003e\u003c/a\u003e update CHANGELOG\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/c963edbf53ac52f9ea6c9717411127d0d7f7061a\"\u003e\u003ccode\u003ec963edb\u003c/code\u003e\u003c/a\u003e Deprecation and removals (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/af6b9b42abcea73d9bfdb0aaff75656171c9cec7\"\u003e\u003ccode\u003eaf6b9b4\u003c/code\u003e\u003c/a\u003e Prepare CHANGELOG for v1.2.0 release from v1.1.3 changes (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1238\"\u003e#1238\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/c7bf73f1987c3b78debb39a7a074e806178ecc9b\"\u003e\u003ccode\u003ec7bf73f\u003c/code\u003e\u003c/a\u003e docs: update outdated requirements and reference links (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1239\"\u003e#1239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/c532b8d9d515ac5769cd285a5a520afed1e035c1\"\u003e\u003ccode\u003ec532b8d\u003c/code\u003e\u003c/a\u003e Reject non-finite \u003ccode\u003edecimal.Decimal\u003c/code\u003e query parameters (\u003ccode\u003eNaN\u003c/code\u003e, \u003ccode\u003esNaN\u003c/code\u003e, `±Infini...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/PyMySQL/PyMySQL/compare/v1.1.2...v1.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.15 to 3.18\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.18 (2026-06-02)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen decoding a domain, add a \u003ccode\u003edisplay\u003c/code\u003e argument that will pass\nthrough invalid labels rather than raising an exception.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.17 (2026-05-28)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSubstantial 75% reduction in memory usage through new data\nstructures and some optimization in processing speed.\u003c/li\u003e\n\u003cli\u003eAdded a general 1024-character input length cap to the public\nvalidation, conversion, and codec entry points. This is well above\nany legitimate domain or label and guards against pathological\ninputs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.16 (2026-05-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a command-line interface (\u003ccode\u003epython -m idna\u003c/code\u003e, also available as\nthe \u003ccode\u003eidna\u003c/code\u003e script). Encodes or decodes one or more domains supplied\nas arguments or on standard input, with options to select A-label\nor U-label output and control error handling.\u003c/li\u003e\n\u003cli\u003eRaise the minimum supported Python version to 3.9\u003c/li\u003e\n\u003cli\u003eVarious code quality 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/kjd/idna/commit/f39ea903ba49eb5a0b2c6723c9a929b41ed4a0f1\"\u003e\u003ccode\u003ef39ea90\u003c/code\u003e\u003c/a\u003e Release 3.18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/40f4e407bc7452da37c24b0c112dcda9a5b299ba\"\u003e\u003ccode\u003e40f4e40\u003c/code\u003e\u003c/a\u003e Pre-release 3.18rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1a5bf80f2fa40454589e6144efe5f72015ef9d24\"\u003e\u003ccode\u003e1a5bf80\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/253\"\u003e#253\u003c/a\u003e from kjd/lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5bbb26fc86e28c4ee1434ae8ae8db76de4c2a5ac\"\u003e\u003ccode\u003e5bbb26f\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c532bae5270489cef8faf9f6b1eb70cbcb454c6d\"\u003e\u003ccode\u003ec532bae\u003c/code\u003e\u003c/a\u003e Rename decode() lenient= option to display= (issue \u003ca href=\"https://redirect.github.com/kjd/idna/issues/248\"\u003e#248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0b1758ba11952a2e88fd6141ffa620409bff0580\"\u003e\u003ccode\u003e0b1758b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/252\"\u003e#252\u003c/a\u003e from kjd/release-3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f48619c4cea6859b938d560fdd9feb898e678567\"\u003e\u003ccode\u003ef48619c\u003c/code\u003e\u003c/a\u003e Release 3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7421ba8003227f816142ab40178e3a7d204e6847\"\u003e\u003ccode\u003e7421ba8\u003c/code\u003e\u003c/a\u003e Pre-release 3.17rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/22ebb73b164081f209449b50162eb7ce086e96a4\"\u003e\u003ccode\u003e22ebb73\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/251\"\u003e#251\u003c/a\u003e from kjd/structure-optimizations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2a7ac0a58c788d50112a5003af545a83807fb108\"\u003e\u003ccode\u003e2a7ac0a\u003c/code\u003e\u003c/a\u003e Drop redundant parallel-arrays comment from uts46data\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.15...v3.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `faker` from 40.13.0 to 40.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/joke2k/faker/releases\"\u003efaker's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v40.23.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.23.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.22.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.22.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.21.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.21.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.20.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.20.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.19.1\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.19.1/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.19.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.19.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.18.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.18.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.17.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.17.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.16.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.16.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.15.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.15.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.14.1\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.14.1/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.14.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.14.0/CHANGELOG.md\"\u003eCHANGELOG.md\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/joke2k/faker/blob/master/CHANGELOG.md\"\u003efaker's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.22.0...v40.23.0\"\u003ev40.23.0 - 2026-06-10\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd French social security numbers with Corsican codes (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2373\"\u003e#2373\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/dancergraham\"\u003e\u003ccode\u003e@​dancergraham\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix typos in docstrings and comments (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2387\"\u003e#2387\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/Labib-Bin-Salam\"\u003e\u003ccode\u003e@​Labib-Bin-Salam\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.21.0...v40.22.0\"\u003ev40.22.0 - 2026-06-09\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003emr_IN\u003c/code\u003e \u003ccode\u003eperson\u003c/code\u003e, \u003ccode\u003eaddress\u003c/code\u003e, and \u003ccode\u003ephone_number\u003c/code\u003e providers (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2367\"\u003e#2367\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/RedZapdos123\"\u003e\u003ccode\u003e@​RedZapdos123\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix flaky \u003ccode\u003etest_optional\u003c/code\u003e by using seed and larger sample size (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2376\"\u003e#2376\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/tejasae-afk\"\u003e\u003ccode\u003e@​tejasae-afk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.20.0...v40.21.0\"\u003ev40.21.0 - 2026-06-02\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd banks list for \u003ccode\u003een_GB\u003c/code\u003e locale (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2363\"\u003e#2363\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/osolomientsev\"\u003e\u003ccode\u003e@​osolomientsev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.19.1...v40.20.0\"\u003ev40.20.0 - 2026-06-01\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epan\u003c/code\u003e and \u003ccode\u003egstin\u003c/code\u003e generators to \u003ccode\u003een_IN\u003c/code\u003e SSN provider (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2357\"\u003e#2357\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/RedZapdos123\"\u003e\u003ccode\u003e@​RedZapdos123\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImprove barcode provider test coverage (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2382\"\u003e#2382\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBump liskin/gh-problem-matcher-wrap from 3 to 4 (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2381\"\u003e#2381\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot].\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.19.0...v40.19.1\"\u003ev40.19.1 - 2026-05-22\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix shared state mutation in \u003ccode\u003een_IN\u003c/code\u003e \u003ccode\u003epincode_in_state\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2369\"\u003e#2369\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/RedZapdos123\"\u003e\u003ccode\u003e@​RedZapdos123\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.18.0...v40.19.0\"\u003ev40.19.0 - 2026-05-22\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003euuid1\u003c/code\u003e and \u003ccode\u003euuid7\u003c/code\u003e providers to \u003ccode\u003emisc\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2344\"\u003e#2344\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.17.0...v40.18.0\"\u003ev40.18.0 - 2026-05-14\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd automotive providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales. Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ephone_number\u003c/code\u003e provider for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales. Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.16.0...v40.17.0\"\u003ev40.17.0 - 2026-05-14\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eam_ET\u003c/code\u003e \u003ccode\u003ephone_number\u003c/code\u003e provider for Ethiopia. Thanks \u003ca href=\"https://github.com/jasur-py\"\u003e\u003ccode\u003e@​jasur-py\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.15.0...v40.16.0\"\u003ev40.16.0 - 2026-05-14\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicate phone number prefix \u003ccode\u003e145\u003c/code\u003e in \u003ccode\u003ezh_CN\u003c/code\u003e locale. Thanks \u003ca href=\"https://github.com/r266-tec\"\u003e\u003ccode\u003e@​r266-tec\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.14.1...v40.15.0\"\u003ev40.15.0 - 2026-04-17\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd job providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2352\"\u003e#2352\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd company providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2351\"\u003e#2351\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd geo providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2350\"\u003e#2350\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd currency providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2349\"\u003e#2349\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003edate_time\u003c/code\u003e provider for \u003ccode\u003ear_DZ\u003c/code\u003e locale (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2348\"\u003e#2348\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd ssn providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2347\"\u003e#2347\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\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/joke2k/faker/commit/f5fcbb64f4e7c1cff6d5b9b0bd0ce96be1f8c2fe\"\u003e\u003ccode\u003ef5fcbb6\u003c/code\u003e\u003c/a\u003e Bump version: 40.22.0 → 40.23.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/baaccee134167886f4fbe631921e1c028b8b890d\"\u003e\u003ccode\u003ebaaccee\u003c/code\u003e\u003c/a\u003e 📝 Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/8336b21bc7d4a6d7499a5f9254280e2e89ad875a\"\u003e\u003ccode\u003e8336b21\u003c/code\u003e\u003c/a\u003e :lipstick: Lint code\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/02bd52b23ea2e5440ee0e3665c61aae993660902\"\u003e\u003ccode\u003e02bd52b\u003c/code\u003e\u003c/a\u003e French social security numbers - corsican codes (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2373\"\u003e#2373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/22e7aca4905f67be9e47e965cd5dcfcde654cace\"\u003e\u003ccode\u003e22e7aca\u003c/code\u003e\u003c/a\u003e Fix typos in docstrings and comments (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2387\"\u003e#2387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/c3a9a5b0a2db5edb0698e9962a559f23f62221d0\"\u003e\u003ccode\u003ec3a9a5b\u003c/code\u003e\u003c/a\u003e Bump version: 40.21.0 → 40.22.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/71393c60588f477ea29fd7436f0aac33c827a60b\"\u003e\u003ccode\u003e71393c6\u003c/code\u003e\u003c/a\u003e 📝 Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/77896ac0da17612e0eb3c1a26a07ec3a7bb6f371\"\u003e\u003ccode\u003e77896ac\u003c/code\u003e\u003c/a\u003e feat(locale): add \u003ccode\u003emr_IN\u003c/code\u003e \u003ccode\u003eperson\u003c/code\u003e, \u003ccode\u003eaddress\u003c/code\u003e, and \u003ccode\u003ephone_number\u003c/code\u003e providers (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/dc63614e2077e0daa4a5c26478dff8935840c7d0\"\u003e\u003ccode\u003edc63614\u003c/code\u003e\u003c/a\u003e Fixed flaky test_optional by using seed and larger sample size. (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2376\"\u003e#2376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/8b06111fbda82a8e84707f86f5d77973c76d836d\"\u003e\u003ccode\u003e8b06111\u003c/code\u003e\u003c/a\u003e Bump version: 40.20.0 → 40.21.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/joke2k/faker/compare/v40.13.0...v40.23.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pdfplumber` from 0.11.9 to 0.11.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/releases\"\u003epdfplumber's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.11.10\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/blob/stable/CHANGELOG.md\"\u003epdfplumber's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.11.10] — 2026-06-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7d4f2f582f2d99f9e60ba522fdf7afd2f6d54c62\"\u003e\u003ccode\u003e7d4f2f5\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b2f8f6fd7f7f92b73d2f1f9350b6e7e9d2\"\u003e\u003ccode\u003e1e6de0b\u003c/code\u003e\u003c/a\u003e Upgrade dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/91b2b6cbca6efd8b94cc44f942385b1047f00661\"\u003e\u003ccode\u003e91b2b6c\u003c/code\u003e\u003c/a\u003e Appease linter/coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/98041536932ce85d18a1fba80d9db0686b831d9d\"\u003e\u003ccode\u003e9804153\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ebafd6e9cb81afcfee0e4d79d119d3058490467a\"\u003e\u003ccode\u003eebafd6e\u003c/code\u003e\u003c/a\u003e Update Python versions in setup.py classifiers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/fc2c9a9001415ebf7b7221eb89db4cb7d2f65fc8\"\u003e\u003ccode\u003efc2c9a9\u003c/code\u003e\u003c/a\u003e Fix list of tested Python versions in README \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1355\"\u003e#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff65d4c92b648bf306e3e782e481258b6c6d\"\u003e\u003ccode\u003e07a5ff6\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251230 to 20260107\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ec96f7256dde1ccad940c19bf9eb97ddb98cfae6\"\u003e\u003ccode\u003eec96f72\u003c/code\u003e\u003c/a\u003e Update Makefile\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jsvine/pdfplumber/compare/v0.11.9...v0.11.10\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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/samifahad58/suhail/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/samifahad58%2Fsuhail/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"},{"uuid":"4704509362","node_id":"PR_kwDOEwGhXM7okShO","number":897,"state":"closed","title":"Bump certifi from 2026.5.20 to 2026.6.17 in the pip-deps group","user":"dependabot[bot]","labels":["dependencies","skip changelog"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-27T01:03:14.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-20T01:03:04.000Z","updated_at":"2026-06-27T01:03:16.000Z","time_to_close":604810,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"}],"path":"the pip-deps group","ecosystem":"pip"},"body":"Bumps the pip-deps group with 1 update: [certifi](https://github.com/certifi/python-certifi).\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\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi\u0026package-manager=pip\u0026previous-version=2026.5.20\u0026new-version=2026.6.17)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/miniscruff/changie/pull/897","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/miniscruff%2Fchangie/issues/897","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/897/packages"},{"uuid":"4688752095","node_id":"PR_kwDOD6WvmM7nwMqF","number":850,"state":"open","title":"build(deps): bump certifi from 2026.5.20 to 2026.6.17","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-18T03:03:17.000Z","updated_at":"2026-06-18T03:13:13.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps)","packages":[{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"}],"path":null,"ecosystem":"pip"},"body":"\u003e [!WARNING]\n\u003e Dependabot will stop supporting `python v3.9`!\n\u003e \n\u003e Please upgrade to one of the following versions: `v3.9`, `v3.10`, `v3.11`, `v3.12`, `v3.13`, or `v3.14`.\n\u003e\n\nBumps [certifi](https://github.com/certifi/python-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\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi\u0026package-manager=pip\u0026previous-version=2026.5.20\u0026new-version=2026.6.17)](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/histolab/histolab/pull/850","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/histolab%2Fhistolab/issues/850","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/850/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"}],"issue_packages":[{"old_version":"2026.4.22","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-07-24T01:50:20.000Z","version_change":"2026.4.22 → 2026.6.17","issue":{"uuid":"4964417245","node_id":"PR_kwDOSuNyS871pZua","number":26,"state":"open","title":"build(deps): Bump the dependencies group across 3 directories with 73 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-24T01:50:20.000Z","updated_at":"2026-07-24T01:50:21.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): Bump","group_name":"dependencies","update_count":73,"packages":[{"name":"asgiref","old_version":"3.11.1","new_version":"3.12.1","repository_url":"https://github.com/django/asgiref"},{"name":"bleach","old_version":"4.1.0","new_version":"6.4.0","repository_url":"https://github.com/mozilla/bleach"},{"name":"blessed","old_version":"1.39.0","new_version":"1.47.0","repository_url":"https://github.com/jquast/blessed"},{"name":"boto3","old_version":"1.43.8","new_version":"1.43.50","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.8","new_version":"1.43.50","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"django","old_version":"5.2.14","new_version":"6.0.7","repository_url":"https://github.com/django/django"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.18.0","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-filter","old_version":"25.2","new_version":"26.1","repository_url":"https://github.com/carltongibson/django-filter"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.1","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-maintenance-mode","old_version":"0.22.0","new_version":"0.23.0","repository_url":"https://github.com/fabiocaccamo/django-maintenance-mode"},{"name":"django-markdownify","old_version":"0.9.1","new_version":"0.9.7","repository_url":"https://github.com/erwinmatijsen/django-markdownify"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-oauth-toolkit","old_version":"3.2.0","new_version":"3.3.0","repository_url":"https://github.com/django-oauth/django-oauth-toolkit"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"django-redis","old_version":"6.0.0","new_version":"7.0.0","repository_url":"https://github.com/jazzband/django-redis"},{"name":"django-structlog","old_version":"10.0.0","new_version":"10.1.0","repository_url":"https://github.com/jrobichaud/django-structlog"},{"name":"docutils","old_version":"0.22.4","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"drf-spectacular","old_version":"0.29.0","new_version":"0.30.0","repository_url":"https://github.com/tfranzel/drf-spectacular"},{"name":"dulwich","old_version":"1.2.1","new_version":"1.2.11","repository_url":"https://github.com/dulwich/dulwich"},{"name":"fido2","old_version":"2.2.0","new_version":"2.2.1","repository_url":"https://github.com/Yubico/python-fido2"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"icalendar","old_version":"7.1.0","new_version":"7.2.0","repository_url":"https://github.com/collective/icalendar"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"importlib-metadata","old_version":"8.7.1","new_version":"9.0.0","repository_url":"https://github.com/python/importlib_metadata"},{"name":"jwcrypto","old_version":"1.5.7","new_version":"1.5.8","repository_url":"https://github.com/latchset/jwcrypto"},{"name":"lxml","old_version":"6.1.0","new_version":"6.1.1","repository_url":"https://github.com/lxml/lxml"},{"name":"nh3","old_version":"0.3.5","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"opentelemetry-exporter-otlp-proto-common","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-grpc","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-exporter-otlp-proto-http","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-instrumentation","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-instrumentation-dbapi","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"opentelemetry-proto","old_version":"1.41.1","new_version":"1.44.0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-semantic-conventions","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"opentelemetry-util-http","old_version":"0.62b1","new_version":"0.65b0","repository_url":"https://github.com/open-telemetry/opentelemetry-python-contrib"},{"name":"pillow","old_version":"12.2.0","new_version":"12.3.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"prettytable","old_version":"3.17.0","new_version":"3.18.0","repository_url":"https://github.com/prettytable/prettytable"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.35.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pypdf","old_version":"6.11.0","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"python-fsutil","old_version":"0.16.1","new_version":"0.17.0","repository_url":"https://github.com/fabiocaccamo/python-fsutil"},{"name":"redis","old_version":"7.4.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"rpds-py","old_version":"0.30.0","new_version":"2026.6.3","repository_url":"https://github.com/crate-py/rpds"},{"name":"s3transfer","old_version":"0.17.0","new_version":"0.19.1","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.60.0","new_version":"2.66.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"setuptools","old_version":"82.0.1","new_version":"83.0.0","repository_url":"https://github.com/pypa/setuptools"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.4","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"tzdata","old_version":"2026.2","new_version":"2026.3","repository_url":"https://github.com/python/tzdata"},{"name":"wcwidth","old_version":"0.7.0","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"weasyprint","old_version":"68.1","new_version":"69.0","repository_url":"https://github.com/Kozea/WeasyPrint"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.2.2","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zipp","old_version":"3.23.1","new_version":"4.1.0","repository_url":"https://github.com/jaraco/zipp"},{"name":"zopfli","old_version":"0.4.1","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.14.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-stubs","old_version":"6.0.4","new_version":"6.0.7","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.4","new_version":"6.0.7","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"pip","old_version":"26.1.1","new_version":"26.1.2","repository_url":"https://github.com/pypa/pip"},{"name":"prek","old_version":"0.4.0","new_version":"0.4.10","repository_url":"https://github.com/j178/prek"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.60","repository_url":"https://github.com/astral-sh/ty"},{"name":"types-psycopg2","old_version":"2.9.21.20260509","new_version":"2.9.21.20260712","repository_url":"https://github.com/python/typeshed"},{"name":"types-pyyaml","old_version":"6.0.12.20260510","new_version":"6.0.12.20260518","repository_url":"https://github.com/python/typeshed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 1 update in the /contrib/dev_reqs directory: [jc](https://github.com/kellyjonbrazil/jc).\nBumps the dependencies group with 2 updates in the /docs directory: [mkdocs-git-revision-date-localized-plugin](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin) and [mkdocstrings](https://github.com/mkdocstrings/mkdocstrings).\nBumps the dependencies group with 70 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [asgiref](https://github.com/django/asgiref) | `3.11.1` | `3.12.1` |\n| [bleach](https://github.com/mozilla/bleach) | `4.1.0` | `6.4.0` |\n| [blessed](https://github.com/jquast/blessed) | `1.39.0` | `1.47.0` |\n| [boto3](https://github.com/boto/boto3) | `1.43.8` | `1.43.50` |\n| [botocore](https://github.com/boto/botocore) | `1.43.8` | `1.43.50` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.6.17` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [django](https://github.com/django/django) | `5.2.14` | `6.0.7` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.18.0` |\n| [django-filter](https://github.com/carltongibson/django-filter) | `25.2` | `26.1` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.1` |\n| [django-maintenance-mode](https://github.com/fabiocaccamo/django-maintenance-mode) | `0.22.0` | `0.23.0` |\n| [django-markdownify](https://github.com/erwinmatijsen/django-markdownify) | `0.9.1` | `0.9.7` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-oauth-toolkit](https://github.com/django-oauth/django-oauth-toolkit) | `3.2.0` | `3.3.0` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [django-redis](https://github.com/jazzband/django-redis) | `6.0.0` | `7.0.0` |\n| [django-structlog](https://github.com/jrobichaud/django-structlog) | `10.0.0` | `10.1.0` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.4` | `0.23` |\n| [drf-spectacular](https://github.com/tfranzel/drf-spectacular) | `0.29.0` | `0.30.0` |\n| [dulwich](https://github.com/dulwich/dulwich) | `1.2.1` | `1.2.11` |\n| [fido2](https://github.com/Yubico/python-fido2) | `2.2.0` | `2.2.1` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.82.1` |\n| [icalendar](https://github.com/collective/icalendar) | `7.1.0` | `7.2.0` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [importlib-metadata](https://github.com/python/importlib_metadata) | `8.7.1` | `9.0.0` |\n| [jwcrypto](https://github.com/latchset/jwcrypto) | `1.5.7` | `1.5.8` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.0` | `6.1.1` |\n| [nh3](https://github.com/messense/nh3) | `0.3.5` | `0.3.6` |\n| [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-grpc](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-instrumentation](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [opentelemetry-instrumentation-dbapi](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.44.0` |\n| [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python) | `0.62b1` | `0.65b0` |\n| [opentelemetry-util-http](https://github.com/open-telemetry/opentelemetry-python-contrib) | `0.62b1` | `0.65b0` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.2.0` | `12.3.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [prettytable](https://github.com/prettytable/prettytable) | `3.17.0` | `3.18.0` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.35.1` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.11.0` | `6.14.2` |\n| [python-fsutil](https://github.com/fabiocaccamo/python-fsutil) | `0.16.1` | `0.17.0` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.0.1` |\n| [rpds-py](https://github.com/crate-py/rpds) | `0.30.0` | `2026.6.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.17.0` | `0.19.1` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.60.0` | `2.66.0` |\n| [setuptools](https://github.com/pypa/setuptools) | `82.0.1` | `83.0.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.4` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [tzdata](https://github.com/python/tzdata) | `2026.2` | `2026.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.7.0` | `0.8.2` |\n| [weasyprint](https://github.com/Kozea/WeasyPrint) | `68.1` | `69.0` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.2.2` |\n| [zipp](https://github.com/jaraco/zipp) | `3.23.1` | `4.1.0` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.1` | `0.4.3` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.15.2` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.4` | `6.0.7` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.4` | `6.0.7` |\n| [pip](https://github.com/pypa/pip) | `26.1.1` | `26.1.2` |\n| [prek](https://github.com/j178/prek) | `0.4.0` | `0.4.10` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.60` |\n| [types-psycopg2](https://github.com/python/typeshed) | `2.9.21.20260509` | `2.9.21.20260712` |\n| [types-pyyaml](https://github.com/python/typeshed) | `6.0.12.20260510` | `6.0.12.20260518` |\n\n\nUpdates `jc` from 1.25.6 to 1.25.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kellyjonbrazil/jc/releases\"\u003ejc's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eJC version 1.25.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kellyjonbrazil/jc/blob/master/CHANGELOG\"\u003ejc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ejc changelog\u003c/p\u003e\n\u003cp\u003e20260617 v1.25.7\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih\u003c/code\u003e, \u003ccode\u003etsv\u003c/code\u003e, and \u003ccode\u003etsv-ih\u003c/code\u003e file parsers for CSV files without headers,\nTSV files, and TSV files without headers. Note that these are standard and\nnot streaming parsers so the entire CSV/TSV will be loaded into memory. For\nlazy loading equivalents, see below.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsv-ih-s\u003c/code\u003e, \u003ccode\u003etsv-s\u003c/code\u003e, and \u003ccode\u003etsv-ih-s\u003c/code\u003e streaming file parsers for CSV files\nwithout headers, TSV files, and TSV files without headers. These streaming\nparsers will lazily load the data into memory and may be more suitable for\nextremely large files.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etypeset\u003c/code\u003e and \u003ccode\u003edeclare\u003c/code\u003e Bash internal command parser to convert variables\nsimple arrays, and associative arrays along with object metadata\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003epip-show\u003c/code\u003e command parser to add \u003ccode\u003e-f\u003c/code\u003e show files support\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003ersync\u003c/code\u003e and \u003ccode\u003ersync-s\u003c/code\u003e parsers to add \u003ccode\u003e--stats\u003c/code\u003e or \u003ccode\u003e--info=stats[1-3]\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ecertbot\u003c/code\u003e command parser to allow parsing of named certs\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003edir\u003c/code\u003e command parser for incorrect stripping of the \u003ccode\u003eD:\u003c/code\u003e drive letter\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ehashsum\u003c/code\u003e command parser to correctly parse the \u003ccode\u003emode\u003c/code\u003e indicator\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eifconfig\u003c/code\u003e command parser for incorrect stripping of leading zeros in some hex numbers\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eiptables\u003c/code\u003e command parser when Target is blank and verbose output is used\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsattr\u003c/code\u003e command parser for filenames with spaces (newlines in filenames are\nstill not supported)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eproc-pid-smaps\u003c/code\u003e proc parser when unknown VmFlags are output\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ejc.utils.timestamp\u003c/code\u003e function and tests for behavior change in python 3.15\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eufw\u003c/code\u003e command parser to support rule logging. A new boolean \u003ccode\u003elog\u003c/code\u003e field is introduced\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20251012 v1.25.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-localgroup\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enet-user\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eroute-print\u003c/code\u003e Windows command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003etraceroute-s\u003c/code\u003e streaming command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003emax_hops\u003c/code\u003e and \u003ccode\u003edata_bytes\u003c/code\u003e fields to \u003ccode\u003etraceroute\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ex509-crl\u003c/code\u003e file parser to support Certificate Revocation List PEM and DER files\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyay\u003c/code\u003e as a magic command for the \u003ccode\u003epacman\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e command parser to support output with the \u003ccode\u003ecable_pairing\u003c/code\u003e attribute\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support blank \u003ccode\u003eteam.config\u003c/code\u003e JSON value and \u003ccode\u003eteam-port.config\u003c/code\u003e JSON value\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etop\u003c/code\u003e command parsers to correct memory size field parsing. Several new unit\nand byte conversion fields have been added\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ewho\u003c/code\u003e command parser to support the \u003ccode\u003eprocess\u003c/code\u003e field on Debian13\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e20250503 v1.25.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eamixer\u003c/code\u003e command parser\u003c/li\u003e\n\u003cli\u003eEnhance \u003ccode\u003eiptables\u003c/code\u003e command parser to add default policy statistics fields\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebluetoothctl\u003c/code\u003e parser failing to parse controllers with power state prop\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003elsblk\u003c/code\u003e command parser to support multiple mountpoints. Also, added\nbyte conversions for size fields.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003enmcli\u003c/code\u003e command parser to support \u003ccode\u003eteam.config\u003c/code\u003e JSON field\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003etime\u003c/code\u003e command parser for output that does not contain centiseconds\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ex509-cert\u003c/code\u003e parser to handle IDNA2008 encoded email addresses with a warning\u003c/li\u003e\n\u003cli\u003eFix typing for upcoming python v3.14\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/8290734a87a30e5f0af7e1fba5ecbda2e1c145a8\"\u003e\u003ccode\u003e8290734\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/712\"\u003e#712\u003c/a\u003e from kellyjonbrazil/dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/9d11e1fe5bbdfb9f68b001940a7ae235b68db637\"\u003e\u003ccode\u003e9d11e1f\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/3a2946b6584f2128917ffe908f749498b8c5ea5c\"\u003e\u003ccode\u003e3a2946b\u003c/code\u003e\u003c/a\u003e add streaming csv-ih, tsv, and tsv-ih parsers with doc fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/22ff0e33c3957c929d45864cc9790b8f7b6fe9c8\"\u003e\u003ccode\u003e22ff0e3\u003c/code\u003e\u003c/a\u003e fix for python 3.15 behavior changes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/fab550e3b8fef49abe297c5ac4f0b2f9b330d3a9\"\u003e\u003ccode\u003efab550e\u003c/code\u003e\u003c/a\u003e docs: fix typos (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/711\"\u003e#711\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/6e79f08c9083836467711e6965f5ca18b1505674\"\u003e\u003ccode\u003e6e79f08\u003c/code\u003e\u003c/a\u003e Add TSV alias and CSV/TSV \u0026quot;No Header\u0026quot; alias (\u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/709\"\u003e#709\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/900aed5d880f2c1150739976bfbfb1f87e64cbc9\"\u003e\u003ccode\u003e900aed5\u003c/code\u003e\u003c/a\u003e fix tests and update docs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/676695eacf75aa01920b89bb1809ee96e47d20bb\"\u003e\u003ccode\u003e676695e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kellyjonbrazil/jc/issues/701\"\u003e#701\u003c/a\u003e from jeffdyke/feature/certs-with-cert-name\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/30c75073044dd364174b080709e9fb6c870ce82e\"\u003e\u003ccode\u003e30c7507\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kellyjonbrazil/jc/commit/7d801f30bb9b35b60938c193d76227f5a3473b50\"\u003e\u003ccode\u003e7d801f3\u003c/code\u003e\u003c/a\u003e doc update\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kellyjonbrazil/jc/compare/v1.25.6...v1.25.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocs-git-revision-date-localized-plugin` from 1.5.2 to 1.5.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/releases\"\u003emkdocs-git-revision-date-localized-plugin's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix paths in MANIFEST.in by \u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mitya57\"\u003e\u003ccode\u003e@​mitya57\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/pull/211\"\u003etimvink/mkdocs-git-revision-date-localized-plugin#211\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/30e58767a16cd9ec1dd2669f0bdc1af8630af18c\"\u003e\u003ccode\u003e30e5876\u003c/code\u003e\u003c/a\u003e Bump version to 1.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/d58c5becb14bcd4a6143768fb3b7478954c09133\"\u003e\u003ccode\u003ed58c5be\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/timvink/mkdocs-git-revision-date-localized-plugin/issues/211\"\u003e#211\u003c/a\u003e from mitya57/fix-manifest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/6da0b4ea1b8c379164a4f1db8e005e98a0b4557d\"\u003e\u003ccode\u003e6da0b4e\u003c/code\u003e\u003c/a\u003e Fix paths in MANIFEST.in\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/commit/aa0d4a3b93f6c4cc36afbf2d8def4af5566d0834\"\u003e\u003ccode\u003eaa0d4a3\u003c/code\u003e\u003c/a\u003e Constrain mkdocs to \u0026lt;2\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/timvink/mkdocs-git-revision-date-localized-plugin/compare/v1.5.2...v1.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mkdocstrings` from 1.0.4 to 1.0.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases\"\u003emkdocstrings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.0.6\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.0.5\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md\"\u003emkdocstrings's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.6\"\u003e1.0.6\u003c/a\u003e - 2026-07-11\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.5...1.0.6\"\u003eCompare with 1.0.5\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eStop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e extension (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e4732798\u003c/a\u003e by Timothée Mazzucotelli). \u003ca href=\"https://redirect.github.com/zensical/zensical/issues/818\"\u003eIssue-zensical-818\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/releases/tag/1.0.5\"\u003e1.0.5\u003c/a\u003e - 2026-07-10\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.5\"\u003eCompare with 1.0.4\u003c/a\u003e\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eParse inventory project and version (\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003eacc0da3\u003c/a\u003e by Timothée Mazzucotelli).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/9a11dcb8e9b39ff6e1a22abdd362350de4e68e9f\"\u003e\u003ccode\u003e9a11dcb\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/473279816aff4cc8ee3215fdf8b2d186517fc63d\"\u003e\u003ccode\u003e4732798\u003c/code\u003e\u003c/a\u003e fix: Stop propagating Zensical's \u003ccode\u003ezrelpath\u003c/code\u003e treeprocessor and its \u003ccode\u003epreview\u003c/code\u003e e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ecbaa9a05dde5bdc83accf8814fa1c9a1ffe1473\"\u003e\u003ccode\u003eecbaa9a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' of github.com:mkdocstrings/mkdocstrings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/64260f748f3db8b301a9d6fa05b2609ab6f6876c\"\u003e\u003ccode\u003e64260f7\u003c/code\u003e\u003c/a\u003e chore: Prepare release 1.0.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/acc0da32d11428ea9c60f8e50f90df329f2e6460\"\u003e\u003ccode\u003eacc0da3\u003c/code\u003e\u003c/a\u003e fix: Parse inventory project and version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ec45a9b7a1301a4c70e02e6c92e1b9caff6df61f\"\u003e\u003ccode\u003eec45a9b\u003c/code\u003e\u003c/a\u003e ci: Fix warnings\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/commit/ce2199c5195535f8c3b4907dd3ac7de2181925cc\"\u003e\u003ccode\u003ece2199c\u003c/code\u003e\u003c/a\u003e chore: Update sponsors section in README (\u003ca href=\"https://redirect.github.com/mkdocstrings/mkdocstrings/issues/823\"\u003e#823\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mkdocstrings/mkdocstrings/compare/1.0.4...1.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `asgiref` from 3.11.1 to 3.12.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django/asgiref/blob/main/CHANGELOG.txt\"\u003easgiref's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.12.1 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRestored the previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape, which was\nrelied on by some APM services. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/572\"\u003e#572\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eNote, this change was available whilst maintaining the underlying fix (from\n\u003ca href=\"https://redirect.github.com/django/asgiref/issues/564\"\u003e#564\u003c/a\u003e). It does not constitute an API stability promise. Ideally APMs are\n\u003cem\u003enot\u003c/em\u003e monkey patching internal APIs, and future changes will be made here if\nneeded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12.0 (2026-07-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAsyncToSync\u003c/code\u003e no longer captures the running event loop on\ninstantiation. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis resolves a series of deadlocks that users experienced after asgiref 3.9.0,\nparticularly with pytest-asyncio. pytest-asyncio stops the event loop between\ntests, and long-running unawaited futures could find themselves trying to\nschedule work onto a stopped loop, and so would never complete. Ideally, code\nshould be structured to await long-running futures before returning, but this\nchange should help users experiencing issues here.\u003c/p\u003e\n\u003cp\u003eThe loop is now resolved when the callable is invoked rather than when it is\ncreated. If \u003ccode\u003easync_to_sync\u003c/code\u003e is called from within \u003ccode\u003esync_to_async\u003c/code\u003e, the\nparent event loop is still used, as before.\u003c/p\u003e\n\u003cp\u003eThe possibility of deadlock therefore remains in some nested patterns. For\nexample, an async function may call a long-running \u003ccode\u003esync_to_async\u003c/code\u003e function\nthat itself uses \u003ccode\u003easync_to_sync\u003c/code\u003e; if the outer function returns before the\nsync future completes, the parent event loop may already be stopped, and the\nnested calls cannot be driven to completion.\u003c/p\u003e\n\u003cp\u003eThis is not a bug in asgiref — the same patterns deadlock in plain asyncio. As\nabove, restructure your code to await the \u003ccode\u003esync_to_async\u003c/code\u003e future before\nexiting the driving coroutine.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed an event loop deadlock when exiting \u003ccode\u003eThreadSensitiveContext\u003c/code\u003e\nwhile its executor thread was still blocked waiting on the event loop.\n(\u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDropped support for EOL Python 3.9.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eStatelessServer.run()\u003c/code\u003e failing on Python 3.14, where\n\u003ccode\u003easyncio.get_event_loop()\u003c/code\u003e no longer creates an event loop if none\nexists. It now uses \u003ccode\u003easyncio.run()\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/559\"\u003e#559\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed \u003ccode\u003eLocal\u003c/code\u003e leaking data between unrelated sync threads when\n\u003ccode\u003esys.flags.thread_inherit_context\u003c/code\u003e is enabled (Python 3.14+), so a newly\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/ef9d4b8b371cf8a7bb63dea3d0fdc60923e9e081\"\u003e\u003ccode\u003eef9d4b8\u003c/code\u003e\u003c/a\u003e Releasing 3.12.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/34fba6328f67a753d814c280811fd34094bd1f6c\"\u003e\u003ccode\u003e34fba63\u003c/code\u003e\u003c/a\u003e Restore previous SyncToAsync.\u003cstrong\u003ecall\u003c/strong\u003e internal code shape.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a43900c131874be571c6afdca642d4054eed0acf\"\u003e\u003ccode\u003ea43900c\u003c/code\u003e\u003c/a\u003e Separate mypy from tests extra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/1b7c338591054c04ff6c140d899ced28b803b4e0\"\u003e\u003ccode\u003e1b7c338\u003c/code\u003e\u003c/a\u003e Releasing 3.12.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/157d9d4168434d73b1bb5a619f947b74ccbf1fc8\"\u003e\u003ccode\u003e157d9d4\u003c/code\u003e\u003c/a\u003e Renovate precommit (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/552\"\u003e#552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/deda0d4fd8d3997dddd9646dd9ef7e0b6d3e59a5\"\u003e\u003ccode\u003ededa0d4\u003c/code\u003e\u003c/a\u003e Test free-threading builds and fix Local data leak for thread_inherit_context...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/a54250a24ad770616d3afcc37af3186558562041\"\u003e\u003ccode\u003ea54250a\u003c/code\u003e\u003c/a\u003e Don’t capture the event loop in \u003ccode\u003eAsyncToSync.__init__\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/562\"\u003e#562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/836356a2802247a0963177197b50cbd7476d7950\"\u003e\u003ccode\u003e836356a\u003c/code\u003e\u003c/a\u003e Use asyncio.run in StatelessServer.run (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/561\"\u003e#561\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/e04afd54ba29bb277ba6177dc898c73c129446f3\"\u003e\u003ccode\u003ee04afd5\u003c/code\u003e\u003c/a\u003e Dropped support for Python 3.9. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/543\"\u003e#543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/asgiref/commit/95d2430a346be7f40652d2eabff84fe54fbc725d\"\u003e\u003ccode\u003e95d2430\u003c/code\u003e\u003c/a\u003e Fixed \u003ca href=\"https://redirect.github.com/django/asgiref/issues/535\"\u003e#535\u003c/a\u003e: ThreadSensitiveContext.\u003cstrong\u003eaexit\u003c/strong\u003e blocking the event loop. (\u003ca href=\"https://redirect.github.com/django/asgiref/issues/563\"\u003e#563\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/asgiref/compare/3.11.1...3.12.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `bleach` from 4.1.0 to 6.4.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/mozilla/bleach/blob/main/CHANGES\"\u003ebleach's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.4.0 (June 5th, 2026)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNOTE: 2026-06-05: Bleach is no longer maintained. There will be no future\nreleases including for security issues.\u003c/strong\u003e\nSee issue: \u003ccode\u003e\u0026lt;https://github.com/mozilla/bleach/issues/698\u0026gt;\u003c/code\u003e__\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eBackwards incompatible changes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDropped support for pypy 3.10. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/764\"\u003e#764\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix bug 2023812 / GHSA-8rfp-98v4-mmr6.\u003c/p\u003e\n\u003cp\u003eFix XSS issue with sanitize_uri_value where disallowed schemes with\nUnicode invisible characters wouldn't be rejected.\u003c/p\u003e\n\u003cp\u003eFor example::\u003c/p\u003e\n\u003cp\u003eimport bleach\npayload1 = '\u003c!-- raw HTML omitted --\u003eClick\u003c!-- raw HTML omitted --\u003e'\nresult1 = bleach.clean(payload1)\nprint(repr(result1))\u003c/p\u003e\n\u003cp\u003eoutputs::\u003c/p\u003e\n\u003cp\u003e'\u003c!-- raw HTML omitted --\u003eClick\u003c!-- raw HTML omitted --\u003e'\u003c/p\u003e\n\u003cp\u003eSee the advisory for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix GHSA-gj48-438w-jh9v.\u003c/p\u003e\n\u003cp\u003eFix issue where URI sanitization wasn't happening in formaction attributes.\u003c/p\u003e\n\u003cp\u003eSee the advisory for details.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBug fixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd support for pypy 3.11. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/764\"\u003e#764\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDrop version max in tinycss2 pin. (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/772\"\u003e#772\u003c/a\u003e)\u003c/p\u003e\n\u003cp\u003eThis removes one of the things we had to keep checking and updating. Users\nnow own the responsibility for correctness with the version of tinycss2\nthey're using.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 6.3.0 (October 27th, 2025)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/f0355a7af00500482c5292c6c83290c6a178068d\"\u003e\u003ccode\u003ef0355a7\u003c/code\u003e\u003c/a\u003e fix: fix last release date in CHANGES\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/ae4e8a26706516ad01b92e66321b480208a440da\"\u003e\u003ccode\u003eae4e8a2\u003c/code\u003e\u003c/a\u003e chore: bleach 6.4.0 and final release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/970df58e9f0c55cc52244f3f0106e473a40d886d\"\u003e\u003ccode\u003e970df58\u003c/code\u003e\u003c/a\u003e fix: uri-sanitization in formaction attributes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/7c4867c32344d1c961107fae62240a6f0dc680dc\"\u003e\u003ccode\u003e7c4867c\u003c/code\u003e\u003c/a\u003e fix: xss bypass in allowed protocol test using unicode invisible characters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/913ab75992b845e2c9c060c41f24d46921db4693\"\u003e\u003ccode\u003e913ab75\u003c/code\u003e\u003c/a\u003e fix: reduce redundancy in workflow jobs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/218c15af455c8dec14f98fcb2e235f8680e93930\"\u003e\u003ccode\u003e218c15a\u003c/code\u003e\u003c/a\u003e fix: rework pip caching\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/4f0b097bf80548a022050e2f71f024d755a9f154\"\u003e\u003ccode\u003e4f0b097\u003c/code\u003e\u003c/a\u003e fix: fix tox platform restrictions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/e95a79d07bb5d792425c2bc0ef5dd03f6614f3bb\"\u003e\u003ccode\u003ee95a79d\u003c/code\u003e\u003c/a\u003e chore: update pytest\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/91539d4e80d4685b8f2bedc79076ff0ff6c1b911\"\u003e\u003ccode\u003e91539d4\u003c/code\u003e\u003c/a\u003e Bump actions/cache from 5.0.3 to 5.0.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mozilla/bleach/commit/cd47b4ce495859065da23c2116f651e591e1e90d\"\u003e\u003ccode\u003ecd47b4c\u003c/code\u003e\u003c/a\u003e fix: handle left-angle-bracket that's not a tag (\u003ca href=\"https://redirect.github.com/mozilla/bleach/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/mozilla/bleach/compare/v4.1.0...v6.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `blessed` from 1.39.0 to 1.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jquast/blessed/releases\"\u003eblessed's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.46\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix DA1 response for some terminals (kitty) by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/392\"\u003ejquast/blessed#392\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImproved remote truecolor detection by unique TERM by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/394\"\u003ejquast/blessed#394\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd sugar for some extended capabilities by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/393\"\u003ejquast/blessed#393\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.45...1.46\"\u003ehttps://github.com/jquast/blessed/compare/1.45...1.46\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.43: bugfix leaked XTGETTCAP responses into inkey()\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix leaked XTGETTCAP responses into inkey() by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/383\"\u003ejquast/blessed#383\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.42...1.43\"\u003ehttps://github.com/jquast/blessed/compare/1.42...1.43\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.42: bugfix regression: cbreak and raw() were not thread-safe\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression in \u003ccode\u003eTerminal.cbreak()\u003c/code\u003e and \u003ccode\u003eraw\u003c/code\u003e were not thread-safe broken in versions 1.40 and 1.41, remove signal ignore of SIGTTOU \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/380\"\u003e#380\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.41...1.42\"\u003ehttps://github.com/jquast/blessed/compare/1.41...1.42\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.41: bugfix get_location() regression\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix get_location() return type in 1.40 release by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/379\"\u003ejquast/blessed#379\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.40...1.41\"\u003ehttps://github.com/jquast/blessed/compare/1.40...1.41\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.40: XTGETTCAP support\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ecurses-free jinxed 2.0 integration by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/374\"\u003ejquast/blessed#374\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eQuery XTGETTCAP on Terminal init by \u003ca href=\"https://github.com/jquast\"\u003e\u003ccode\u003e@​jquast\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jquast/blessed/pull/375\"\u003ejquast/blessed#375\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jquast/blessed/compare/1.39...1.40\"\u003ehttps://github.com/jquast/blessed/compare/1.39...1.40\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.17.9: Initial support for Python 3.10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: Now imports on 3.10+\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.15.0: Disable various integration tests, support python 3.7\u003c/h2\u003e\n\u003cp\u003eNo release notes provided.\u003c/p\u003e\n\u003ch2\u003e1.14.0: bugfix term.wrap for text containing newlines\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: term.wrap misbehaved for text containing newlines, \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/74\"\u003e#74\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.13.0: new Terminal.split_seqs() function, speed enhancement\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eenhancement: method \u003ccode\u003eTerminal.split_seqs\u003c/code\u003e introduced, and 4x cost reduction in related sequence-aware functions, \u003ca href=\"https://redirect.github.com/jquast/blessed/issues/29\"\u003e#29\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003edeprecated: function \u003ccode\u003eblessed.sequences.measure_length\u003c/code\u003e superseded by \u003ccode\u003eblessed.sequences.iter_parse\u003c/code\u003e if necessary.\u003c/li\u003e\n\u003cli\u003edeprecated: warnings about \u0026quot;binary-packed capabilities\u0026quot; are no longer emitted on strange terminal types, making best effort.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.12.0: add Terminal.get_location() method\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eenhancement: method Terminal.get_location\u003ccode\u003ereturns the\u003c/code\u003e(row, col)`` position of the cursor at the time of call for attached terminal.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jquast/blessed/blob/master/docs/history.rst\"\u003eblessed's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. py:currentmodule:: blessed.terminal\u003c/p\u003e\n\u003ch1\u003eVersion History\u003c/h1\u003e\n\u003cp\u003e1.47\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~Terminal.does_sixel\u003c/code\u003e now returns \u003ccode\u003eTrue\u003c/code\u003e for SyncTERM using special-case\nmatching of its illegal DA1 response.\u003c/li\u003e\n\u003cli\u003ebugfix: legacy SGR mouse decoder reported no-button motion event (mode 1003) as \u003ccode\u003eLEFT_MOTION\u003c/code\u003e\ninstead of \u003ccode\u003eMOTION\u003c/code\u003e, :ghpull:\u003ccode\u003e398\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003ebugfix: match keyboard input \u003ccode\u003e\\x1b\\n\u003c/code\u003e as \u003ccode\u003eKEY_ALT_ENTER\u003c/code\u003e instead of \u003ccode\u003eKEY_CTRL_ALT_J\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.46\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~Terminal.does_sixel\u003c/code\u003e failed to detect DA1 and caused the response to \u0026quot;leak\u0026quot; into\nnext call to :meth:\u003ccode\u003e~Terminal.inkey\u003c/code\u003e for some terminals of unmatched patterns (e.g., kitty).\u003c/li\u003e\n\u003cli\u003eimprove: add new sugar for extended cap-defined styles, like 'clear_scrollback' (common),\n'strikethrough', and 'overline' (not common).\u003c/li\u003e\n\u003cli\u003eimprove: Truecolor support by unique TERM, improves remote sessions like SSH that do not forward\n\u003ccode\u003eCOLORTERM\u003c/code\u003e, and, for the few terminals that do not respond to XTGETTCAP request for \u003ccode\u003eRGB\u003c/code\u003e:\n(kitty).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.45\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: name consistency of kitty keyboard modifiers :ghpull:\u003ccode\u003e390\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.44\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eimprove: reduce errant XTGETTCAP output for Terminal.app and ConEmu.exe :ghpull:\u003ccode\u003e385\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.43\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression of XTGETTCAP responses leaking into first call for empty/non-response\nterminals (libvte/Gnome Terminal), in versions 1.40 to 1.42 :ghpull:\u003ccode\u003e383\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.42\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: regression in :meth:\u003ccode\u003e~.Terminal.cbreak\u003c/code\u003e and :meth:\u003ccode\u003e~.Terminal.raw\u003c/code\u003e were not thread-safe\nbroken in versions 1.40 and 1.41, remove signal ignore of SIGTTOU :ghissue:\u003ccode\u003e380\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.41\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ebugfix: :meth:\u003ccode\u003e~.Terminal.get_location\u003c/code\u003e broken in 1.40, returned a generator instead of a tuple.\n:ghissue:\u003ccode\u003e378\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e1.40\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eimproved: jinxed_ is \u003cstrong\u003enow required on all platforms\u003c/strong\u003e, providing a curses-free and\n\u003ccode\u003esingleton-free \u0026lt;https://jinxed.readthedocs.io/en/stable/capabilities.html#singleton-free\u0026gt;\u003c/code\u003e_\nimplementation of the subset of curses_ used by blessed.  The jinxed_ 1.5.0 release provides a\nterminal \u003ccode\u003ecapability database \u0026lt;https://jinxed.readthedocs.io/en/stable/capabilities.html#database\u0026gt;\u003c/code\u003e of 45 terminals and their\ncommon aliases.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eimproved: Class initialization of :class:\u003ccode\u003e~.Terminal()\u003c/code\u003e now uses \u003ccode\u003eXTGETTCAP\u003c/code\u003e_ to determine\npreferred terminal name \u003ccode\u003eTN\u003c/code\u003e, 24-bit color support \u003ccode\u003eRGB\u003c/code\u003e, number of colors \u003ccode\u003eCo\u003c/code\u003e, \u003ccode\u003eitalic\u003c/code\u003e,\nand \u003ccode\u003eblink\u003c/code\u003e capabilities.\u003c/p\u003e\n\u003cp\u003eThis improves detection of Terminal \u003ccode\u003ekind\u003c/code\u003e and \u003ccode\u003enumber_of_colors\u003c/code\u003e over protocols like serial\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jquast/blessed/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.8 to 1.43.50\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/a8ae7f0619b16600dfb006b07c55c3e276cbf21a\"\u003e\u003ccode\u003ea8ae7f0\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.50'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b8c36a990c84df2cdec68b0af03194c619e3e8f1\"\u003e\u003ccode\u003eb8c36a9\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.50\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/fa19980a5c4eee55479fb56b444dc785a6e6b988\"\u003e\u003ccode\u003efa19980\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2ce2fd5ac8a6e5069465b4eface2938a940bc8b2\"\u003e\u003ccode\u003e2ce2fd5\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d2937da5351e7da82f983c2c572ba35615746b62\"\u003e\u003ccode\u003ed2937da\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/159cb6abdba69c6a433ad2b83920e850643a85cc\"\u003e\u003ccode\u003e159cb6a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.49\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2b8f4d84ae0fb264813e0997f3e510d517b4a1ab\"\u003e\u003ccode\u003e2b8f4d8\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/aa40f37ebe773ef7e8aadbeffee37aeaec8a29c2\"\u003e\u003ccode\u003eaa40f37\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.48'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/652b573c3d4853497e60f983ff2938d2c4efbb4e\"\u003e\u003ccode\u003e652b573\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.48' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/13cce5d163edd8e436f51d61c9fde9619c48993b\"\u003e\u003ccode\u003e13cce5d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.48\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.8...1.43.50\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.43.8 to 1.43.50\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/42b0340e335b1f633be78fa7e59832bb37951a68\"\u003e\u003ccode\u003e42b0340\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.50'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/febd30f4a24b77afe9ef211aad0675453d621618\"\u003e\u003ccode\u003efebd30f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.50\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/31af253ee49bea34214380b92e7d0152d5f69fa4\"\u003e\u003ccode\u003e31af253\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e179889d6e2bc604b77b9785735d336612e7108a\"\u003e\u003ccode\u003ee179889\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eceb63d43b437b7e5cc67251c07bdb583ee845bd\"\u003e\u003ccode\u003eeceb63d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3749\"\u003e#3749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/eecee80c7891c35f2f60ec00d7c4fa81b5fce388\"\u003e\u003ccode\u003eeecee80\u003c/code\u003e\u003c/a\u003e Bump \u003ca href=\"https://github.com/astral-sh/ruff-pre-commit\"\u003ehttps://github.com/astral-sh/ruff-pre-commit\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3745\"\u003e#3745\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7d6402f9d49dfa0a873f07b57b888b8d5158738c\"\u003e\u003ccode\u003e7d6402f\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/10f305e588ce4ebe24dd0c8d8ff0e825782bbd85\"\u003e\u003ccode\u003e10f305e\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.49' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/2b632ee6822a4f254a02aae6e37b479ae77b688f\"\u003e\u003ccode\u003e2b632ee\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.49\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/7ef2356e4892dfb360bddfb0fba8632ac8a59797\"\u003e\u003ccode\u003e7ef2356\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.8...1.43.50\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.4.22 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cffi` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-cffi/cffi/releases\"\u003ecffi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.1.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.15 and support for C extensions generated by CFFI\nto target the new \u003ccode\u003eabi3t\u003c/code\u003e free-threaded ABI.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.9.\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ecffi-gen-src\u003c/code\u003e CLI to generate CFFI C extension source for alternate build backend support.\u003c/li\u003e\n\u003cli\u003eFixed crashes inside \u003ccode\u003e__delitem__\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u0026quot;string too big\u0026quot; error under MSVC.\u003c/li\u003e\n\u003cli\u003eFixed mingw builds.\u003c/li\u003e\n\u003cli\u003eAdded support for arm64 iOS wheels.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/d9f6f70adac5ca9f260abf5405cf4d0373767b65\"\u003e\u003ccode\u003ed9f6f70\u003c/code\u003e\u003c/a\u003e New release 2.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/02a7b0e32db93964b9756537110119d74aa23425\"\u003e\u003ccode\u003e02a7b0e\u003c/code\u003e\u003c/a\u003e Misc pre-2.1 release/packaging cleanup (\u003ca href=\"https://redirect.github.com/python-cffi/cffi/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/1362e5ddc5417f1350200d4d6183c3eb3da9cc8d\"\u003e\u003ccode\u003e1362e5d\u003c/code\u003e\u003c/a\u003e Move cffi-gen-src release note to 2.1.0 notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a797055125e049fd79483d0dcdf8cff59c64c6e4\"\u003e\u003ccode\u003ea797055\u003c/code\u003e\u003c/a\u003e Make error message when embedding version test fails more friendly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/f1f40a8e1667b9ef6cf8fe3c451829408feab018\"\u003e\u003ccode\u003ef1f40a8\u003c/code\u003e\u003c/a\u003e Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/dc62c93af7be7c535dc17f621de2bfc99490d3bd\"\u003e\u003ccode\u003edc62c93\u003c/code\u003e\u003c/a\u003e Delete missed cp39 Windows builds\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/a34118009e64a7fed8ea49bdbad4d6a07494bb4f\"\u003e\u003ccode\u003ea341180\u003c/code\u003e\u003c/a\u003e Update version numbers to prepare for v2.1 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/9f04d8506a6c7186dc3be7316f21aab042e075cb\"\u003e\u003ccode\u003e9f04d85\u003c/code\u003e\u003c/a\u003e Mark test using inet_ntoa as thread-unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/5f127028caeb7750c4763f7381dd1b12c4747d95\"\u003e\u003ccode\u003e5f12702\u003c/code\u003e\u003c/a\u003e Fix flaky pytest-run-parallel CI crash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-cffi/cffi/commit/26b3d3ae756138d4f9e8f42f063f73c26aa40c24\"\u003e\u003ccode\u003e26b3d3a\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into integrate-buildtool\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-cffi/cffi/compare/v2.0.0...v2.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `charset-normalizer` from 3.4.7 to 3.4.9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/releases\"\u003echarset-normalizer's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.4.9\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.4.8\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jawah/charset_normalizer/blob/master/CHANGELOG.md\"\u003echarset-normalizer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.8...3.4.9\"\u003e3.4.9\u003c/a\u003e (2026-07-07)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRegression in our fallback path leading to a decode error. (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/771\"\u003e#771\u003c/a\u003e)\nWe've yanked 3.4.8 as a result of that bug.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8\"\u003e3.4.8\u003c/a\u003e (2026-07-06)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eWall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/742\"\u003e#742\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUnnecessary json import at runtime (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/753\"\u003e#753\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInverse capitalization not seen by noise detector (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/731\"\u003e#731\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eNo longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage.\u003c/li\u003e\n\u003cli\u003eMicro-optimizations in our noise / coherence measurements.\u003c/li\u003e\n\u003cli\u003eNo longer using regex search by default for our preemptive charset mark algorithm.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of setuptools to v83.\u003c/li\u003e\n\u003cli\u003eRaised upperbound of mypy(c) to v2.1.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRedundant UTF7 BOM marker (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/730\"\u003e#730\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/cc6840753f17f00dea4e339ce37507747217e916\"\u003e\u003ccode\u003ecc68407\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/772\"\u003e#772\u003c/a\u003e from jawah/fix-regression-fallback-path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/152b923c87e212e11c9591ff0a29ff35df719c91\"\u003e\u003ccode\u003e152b923\u003c/code\u003e\u003c/a\u003e chore: release 3.4.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/2bc26076a86704fc19bc2ae811615b169373dea6\"\u003e\u003ccode\u003e2bc2607\u003c/code\u003e\u003c/a\u003e fix: unicodedecodeerror in fallback path\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/be252d70c9f45846f0e851cc4d1829328540c825\"\u003e\u003ccode\u003ebe252d7\u003c/code\u003e\u003c/a\u003e chore(deps): bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/71c7bdd25514e5631c17be397abb6a2974b26e5b\"\u003e\u003ccode\u003e71c7bdd\u003c/code\u003e\u003c/a\u003e chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/768\"\u003e#768\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aeea391cc95761f1353b3914afcdee7a6e7589da\"\u003e\u003ccode\u003eaeea391\u003c/code\u003e\u003c/a\u003e chore(deps): bump pypa/cibuildwheel from 3.4.1 to 4.1.0 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/758\"\u003e#758\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/a6f8febd210c129ea741e6562fc06ee1ac437487\"\u003e\u003ccode\u003ea6f8feb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/770\"\u003e#770\u003c/a\u003e from jawah/unblock-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/528e16ce9105d10ea6cc66d41f237ba3c64c4392\"\u003e\u003ccode\u003e528e16c\u003c/code\u003e\u003c/a\u003e chore: add osv-scanner.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/5993498b06d0bcb0cc1aaab1255742fef39a5aca\"\u003e\u003ccode\u003e5993498\u003c/code\u003e\u003c/a\u003e chore: ast_serialize musl missing prebuilt riscv,s390x,ppc64le\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jawah/charset_normalizer/commit/aa2ddd8fb788b98a815f25c37609e919105d1dbb\"\u003e\u003ccode\u003eaa2ddd8\u003c/code\u003e\u003c/a\u003e Release 3.4.8 (\u003ca href=\"https://redirect.github.com/jawah/charset_normalizer/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jawah/charset_normalizer/compare/3.4.7...3.4.9\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django` from 5.2.14 to 6.0.7\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/e2a424605ac2e7e6e799496542fb2997207e2f23\"\u003e\u003ccode\u003ee2a4246\u003c/code\u003e\u003c/a\u003e [6.0.x] Bumped version for 6.0.7 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/a5de13f1491f1dbf2bb0ad9b91570524ebbc8acd\"\u003e\u003ccode\u003ea5de13f\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-53878 -- Prevented newlines from being accepted in Dom...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/38dfbd27d7d4f4e6eaa087d7a90f2613fbf55b3a\"\u003e\u003ccode\u003e38dfbd2\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-53877 -- Prevented heap buffer over-read when creating...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/64f9a2b2283fde3ec69fb0dfe441cf0f6f411ba3\"\u003e\u003ccode\u003e64f9a2b\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-48588 -- Prevented caching of responses that set cooki...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c26957a58241037f5849171f35177b95c7ec6660\"\u003e\u003ccode\u003ec26957a\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed flatpages synopsis in docs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/0b60f44b77510c00ca79403560987cfbaf5a0037\"\u003e\u003ccode\u003e0b60f44\u003c/code\u003e\u003c/a\u003e [6.0.x] Added FILE_UPLOAD_DIRECTORY_PERMISSIONS to docs settings index.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/d928e3060b258fcd002c80d80bb40390efc988db\"\u003e\u003ccode\u003ed928e30\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37172\"\u003e#37172\u003c/a\u003e -- Linked to upload handlers section in FILE_UPLOAD_* se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/e18935cc265aa30079b9c2d280e53cfb91679bba\"\u003e\u003ccode\u003ee18935c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed \u003ca href=\"https://redirect.github.com/django/django/issues/37158\"\u003e#37158\u003c/a\u003e -- Reordered the contribution checklist sections.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/490eb9cfb68848b88c91f2b6c75d57e2620c7304\"\u003e\u003ccode\u003e490eb9c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed document referenced in multiple toctrees warning in docs/intern...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/748a9b53c5864f87f4501378d2748199ff0063bb\"\u003e\u003ccode\u003e748a9b5\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed duplicate target name in docs/internals/howto-release-django.txt.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.14...6.0.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth` from 65.14.3 to 65.18.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-filter` from 25.2 to 26.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst\"\u003edjango-filter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 26.1 (2026-07-11)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdded testing for Django 6.1.\u003c/p\u003e\n\u003cp\u003eDRF integration will require the upcoming DRF v3.18.\nSee \u003ca href=\"https://redirect.github.com/encode/django-rest-framework/pull/9978\"\u003eencode/django-rest-framework#9978\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAdded testing against Python 3.14.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/52c3c0f21ef8fe281982ec0e95a3675cd8402214\"\u003e\u003ccode\u003e52c3c0f\u003c/code\u003e\u003c/a\u003e Set date and bump version for 26.1 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/6a3222aaf83170df0f967423444d5312b99a3d69\"\u003e\u003ccode\u003e6a3222a\u003c/code\u003e\u003c/a\u003e Add testing for Python 3.14.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/aa3bd8e87136d4730f4eb44b3386e52c218bcf66\"\u003e\u003ccode\u003eaa3bd8e\u003c/code\u003e\u003c/a\u003e Added testing against Django 6.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/ec717ea11378a4dc003cbe2f77b5211d8815a0b6\"\u003e\u003ccode\u003eec717ea\u003c/code\u003e\u003c/a\u003e Correct Language header in Greek locale file (el) (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1751\"\u003e#1751\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/31b297ca2414218052476ba458c4d1eedc0a0f99\"\u003e\u003ccode\u003e31b297c\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1733\"\u003e#1733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/590c0a3e7d73fafa4fb25df45b53fcc79258d09f\"\u003e\u003ccode\u003e590c0a3\u003c/code\u003e\u003c/a\u003e Fix version range for Django 6.0 (\u003ca href=\"https://redirect.github.com/carltongibson/django-filter/issues/1731\"\u003e#1731\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/carltongibson/django-filter/commit/6204bc4eb75edf7ba766fc256d72a68fa80c3029\"\u003e\u003ccode\u003e6204bc4\u003c/code\u003e\u003c/a\u003e Added release date for v25.2.\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/carltongibson/django-filter/compare/25.2...26.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-js-asset` from 3.1.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/feincms/django-js-asset/blob/main/CHANGELOG.rst\"\u003edjango-js-asset's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. _changelog:\u003c/p\u003e\n\u003ch1\u003eChange log\u003c/h1\u003e\n\u003cp\u003eNext version\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Fixed ``js_asset.Media`` crashing with an ``AttributeError`` when rendering an\n  asset that only implements Django's plain ``__html__`` contract (neither a\n  ``MediaAsset`` nor one of our ``ImportMap``/``JSON`` types). Such assets now\n  fall back to ``__html__()`` exactly like ``django.forms.Media`` does; the\n  nonce cannot be threaded into an opaque ``__html__`` asset, same as with stock\n  Django.\n- Corrected the docs around Django 6.1 support. Thanks James Bligh!\n- Finally set up a documentation site at Read the Docs for django-js-asset.\n\u003cp\u003e4.0 (2026-06-11)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eThis is a major release. Most code keeps working unchanged and the rendered\nHTML is the same, but \u003cstrong\u003eif you use import maps the upgrade is not automatic\u003c/strong\u003e --\nsee the import-map note at the end.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ejs_asset.Media\u003c/code\u003e, a \u003ccode\u003edjango.forms.Media\u003c/code\u003e subclass with two extra\nabilities. First, it merges every embedded \u003ccode\u003eImportMap\u003c/code\u003e into a single\n\u003ccode\u003e\u0026lt;script type=\u0026quot;importmap\u0026quot;\u0026gt;\u003c/code\u003e rendered before any other script -- this\nreplaces the old global \u003ccode\u003eimportmap\u003c/code\u003e object and works no matter how many\nmedia objects Django combines. Second, it applies a request-scoped CSP nonce\nto the tags it renders. It implements \u003ccode\u003e__add__\u003c/code\u003e \u003cstrong\u003eand\u003c/strong\u003e \u003ccode\u003e__radd__\u003c/code\u003e, so it\nkeeps its type -- and its nonce -- when combined with a plain \u003ccode\u003eforms.Media\u003c/code\u003e\nfrom either side (e.g. while Django collects form and widget media). The nonce\ncan be passed to the constructor (\u003ccode\u003enonce=\u003c/code\u003e), copied onto a clone with\n\u003ccode\u003ewith_nonce()\u003c/code\u003e, or passed to \u003ccode\u003erender(nonce=...)\u003c/code\u003e; \u003ccode\u003erender()\u003c/code\u003e also accepts\n\u003ccode\u003eattrs={\u0026quot;nonce\u0026quot;: ...}\u003c/code\u003e so it plugs straight into Django 6.2's\n\u003ccode\u003e{% csp_nonce_attr %}\u003c/code\u003e tag. \u003ccode\u003eMedia.from_media()\u003c/code\u003e wraps an existing\n\u003ccode\u003eforms.Media\u003c/code\u003e instance (e.g. \u003ccode\u003eform.media\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eJS\u003c/code\u003e and \u003ccode\u003eCSS\u003c/code\u003e now \u003cem\u003eproduce\u003c/em\u003e Django's own \u003ccode\u003eScript\u003c/code\u003e and \u003ccode\u003eStylesheet\u003c/code\u003e\nobjects (backported via \u003ccode\u003ejs_asset._compat\u003c/code\u003e on Django versions that lack\nthem) instead of being standalone dataclasses. They therefore share merge\nbuckets with native Django assets and with bare path strings, so the same\nfile is no longer rendered more than once when \u003ccode\u003ejs_asset\u003c/code\u003e assets, plain\nstrings and Django's auto-wrapped assets meet in \u003ccode\u003eforms.Media.merge()\u003c/code\u003e.\n\u003ccode\u003eisinstance(x, JS)\u003c/code\u003e / \u003ccode\u003eisinstance(x, CSS)\u003c/code\u003e keep working (via a metaclass).\nInline CSS (\u003ccode\u003eCSS(src, inline=True)\u003c/code\u003e) is rendered by a small dedicated\n\u003ccode\u003eInlineStyle\u003c/code\u003e asset. Rendered output is unchanged.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eScript\u003c/code\u003e, \u003ccode\u003eStylesheet\u003c/code\u003e, \u003ccode\u003eMediaAsset\u003c/code\u003e and \u003ccode\u003eInlineStyle\u003c/code\u003e can now be\nimported from \u003ccode\u003ejs_asset\u003c/code\u003e -- prefer these in \u003ccode\u003eisinstance\u003c/code\u003e checks over\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/7c024a3ef83a1c2951f2ab3925e85b81ebbc8bc0\"\u003e\u003ccode\u003e7c024a3\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/59aa7e529ef7052c3c1710e8a673c14c852334f6\"\u003e\u003ccode\u003e59aa7e5\u003c/code\u003e\u003c/a\u003e Fix \u003cstrong\u003ehtml\u003c/strong\u003e objects in Media\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b3c515c793185d96d43124a8239267a535bdd18f\"\u003e\u003ccode\u003eb3c515c\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/8a343389d9500999bd3397a1d1c44cb5ee709a00\"\u003e\u003ccode\u003e8a34338\u003c/code\u003e\u003c/a\u003e Address review comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b7d05eb0f4d7548219b06eb4057fe908c2e85a23\"\u003e\u003ccode\u003eb7d05eb\u003c/code\u003e\u003c/a\u003e Remove the global importmap and update the guidance accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/3213b9bd209527e989c0fb8f552e7941407460cc\"\u003e\u003ccode\u003e3213b9b\u003c/code\u003e\u003c/a\u003e Increase interoperability with Django's own object-based media assets\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/cfe3b529f22bd8dcd1abf193aa4af0f1e96681be\"\u003e\u003ccode\u003ecfe3b52\u003c/code\u003e\u003c/a\u003e Add a Media subclass with import-map merging and CSP nonce support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/6708307bd5e1d5cc18cb58da63e2c6ace07e653c\"\u003e\u003ccode\u003e6708307\u003c/code\u003e\u003c/a\u003e dj62 does not exist yet as a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/9961d4871605432a9923d2a844d51d9efca47c73\"\u003e\u003ccode\u003e9961d48\u003c/code\u003e\u003c/a\u003e Run tests with newer Django and Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/f77abf57e6754612793c9976305f704f61dfceff\"\u003e\u003ccode\u003ef77abf5\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/feincms/django-js-asset/issues/20\"\u003e#20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/feincms/django-js-asset/compare/3.1.2...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-maintenance-mode` from 0.22.0 to 0.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/releases\"\u003edjango-maintenance-mode's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.23.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePython 3.14\u003c/code\u003e and \u003ccode\u003eDjango 6.0\u003c/code\u003e support.\u003c/li\u003e\n\u003cli\u003eAdd scheduled maintenance mode support: \u003ccode\u003eset_maintenance_mode(True, start=..., end=...)\u003c/code\u003e and \u003ccode\u003emanage.py maintenance_mode on --start ... --end ...\u003c/code\u003e (maintenance mode automatically activates/deactivates itself based on the scheduled datetimes). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/64\"\u003e#64\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote for custom state backends consumers: \u003ccode\u003eget_value()\u003c/code\u003e now returns \u003ccode\u003ebool\u003c/code\u003e or \u003ccode\u003edict\u003c/code\u003e (scheduled state), and the state file format is extended accordingly (running \u003ccode\u003emaintenance_mode off\u003c/code\u003e restores the plain bool format).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_STAFF_USER\u003c/code\u003e and \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_SUPERUSER\u003c/code\u003e settings to override the \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_AUTHENTICATED_USER\u003c/code\u003e behavior for staff users and superusers (if \u003ccode\u003eNone\u003c/code\u003e, default, they inherit the \u003ccode\u003eMAINTENANCE_MODE_LOGOUT_AUTHENTICATED_USER\u003c/code\u003e behavior). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/191\"\u003e#191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eMAINTENANCE_MODE_RESPONSE_TYPE\u003c/code\u003e to be the path of a function that receives the request and returns the response type (\u003ccode\u003e\u0026quot;html\u0026quot;\u003c/code\u003e or \u003ccode\u003e\u0026quot;json\u0026quot;\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/204\"\u003e#204\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTENANCE_MODE_GET_AUTHENTICATED_USER\u003c/code\u003e setting to support non-session authentication (eg. \u003ccode\u003eJWT\u003c/code\u003e / token authentication with \u003ccode\u003edjango-rest-framework\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/233\"\u003e#233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove middleware position docs. \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/251\"\u003e#251\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/blob/main/CHANGELOG.md\"\u003edjango-maintenance-mode's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/fabiocaccamo/django-maintenance-mode/releases/tag/0.23.0\"\u003e0.23.0\u003c/a\u003e - 2026-07-13\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePython 3.14\u003c/code\u003e and \u003ccode\u003eDjango 6.0\u003c/code\u003e support.\u003c/li\u003e\n\u003cli\u003eAdd scheduled maintenance mode support: \u003ccode\u003eset_maintenance_mode(True, start=..., end=...)\u003c/code\u003e and \u003ccode\u003emanage.py maintenance_mode on --start ... --end ...\u003c/code\u003e (maintenance mode automatically activates/deactivates itself based on the scheduled datetimes). \u003ca href=\"https://redirect.github.com/fabiocaccamo/django-maintenance-mode/issues/64\"\u003e#64\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eNote for custom state backends consumers: \u003ccode\u003eget_value()\u003c/code\u003e now returns \u003ccode\u003ebool\u003c/code\u003e or \u003ccode\u003edict\u003c/code\u003e (scheduled state), and the state file format is extended accordingly (running \u003ccode\u003emaintenance_mode off\u003c/code\u003e restores the plain bool format).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eMAINTE...\n\n_Description has been truncated_","html_url":"https://github.com/artursampaio-gc/goproduct/pull/26","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/artursampaio-gc%2Fgoproduct/issues/26","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/26/packages"}},{"old_version":"2026.6.17","new_version":"2026.7.22","update_type":"minor","path":null,"pr_created_at":"2026-07-22T18:54:19.000Z","version_change":"2026.6.17 → 2026.7.22","issue":{"uuid":"4952175034","node_id":"PR_kwDOPSOV8871B4h8","number":186,"state":"closed","title":"build(deps): bump certifi from 2026.6.17 to 2026.7.22","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-22T18:54:31.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-22T18:54:19.000Z","updated_at":"2026-07-22T18:54:38.000Z","time_to_close":12,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps)","packages":[{"name":"certifi","old_version":"2026.6.17","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"}],"path":null,"ecosystem":"pip"},"body":"Bumps [certifi](https://github.com/certifi/python-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\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi\u0026package-manager=pip\u0026previous-version=2026.6.17\u0026new-version=2026.7.22)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/th30d4y/OpenLearnX/pull/186","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/th30d4y%2FOpenLearnX/issues/186","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/186/packages"}},{"old_version":"2026.5.20","new_version":"2026.7.22","update_type":"minor","path":null,"pr_created_at":"2026-07-22T04:55:23.000Z","version_change":"2026.5.20 → 2026.7.22","issue":{"uuid":"4945586489","node_id":"PR_kwDOSftIMc70sZjY","number":80,"state":"open","title":"chore(deps)(deps): bump the python-patch-minor group across 1 directory with 37 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-07-22T04:55:23.000Z","updated_at":"2026-07-22T04:55:24.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)(deps): bump","group_name":"python-patch-minor","update_count":37,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.139.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.51.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"python-multipart","old_version":"0.0.31","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"alembic","old_version":"1.18.4","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"pydantic","old_version":"2.13.2","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"pymupdf","old_version":"1.24.10","new_version":"1.28.0","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"pypdf","old_version":"6.13.3","new_version":"6.14.2","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"},{"name":"openai","old_version":"2.32.0","new_version":"2.46.0","repository_url":"https://github.com/openai/openai-python"},{"name":"google-genai","old_version":"2.10.0","new_version":"2.13.0","repository_url":"https://github.com/googleapis/python-genai"},{"name":"google-cloud-vision","old_version":"3.14.0","new_version":"3.15.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"playwright","old_version":"1.60.0","new_version":"1.61.0","repository_url":"https://github.com/microsoft/playwright-python"},{"name":"ruff","old_version":"0.15.14","new_version":"0.15.22","repository_url":"https://github.com/astral-sh/ruff"},{"name":"coverage","old_version":"7.14.0","new_version":"7.15.2","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"httpx2","old_version":"2.4.0","new_version":"2.7.0","repository_url":"https://github.com/pydantic/httpx2"},{"name":"pip-audit","old_version":"2.10.0","new_version":"2.10.1","repository_url":"https://github.com/pypa/pip-audit"},{"name":"anyio","old_version":"4.13.0","new_version":"4.14.2","repository_url":"https://github.com/agronholm/anyio"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.7.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"cffi","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python-cffi/cffi"},{"name":"charset-normalizer","old_version":"3.4.7","new_version":"3.4.9","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"google-api-core","old_version":"2.30.3","new_version":"2.32.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-api-python-client","old_version":"2.196.0","new_version":"2.198.0","repository_url":"https://github.com/googleapis/google-api-python-client"},{"name":"google-auth","old_version":"2.53.0","new_version":"2.56.2","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"greenlet","old_version":"3.5.1","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"grpcio","old_version":"1.80.0","new_version":"1.82.1","repository_url":"https://github.com/grpc/grpc"},{"name":"grpcio-status","old_version":"1.71.2","new_version":"1.82.1"},{"name":"idna","old_version":"3.16","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jiter","old_version":"0.15.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"proto-plus","old_version":"1.28.0","new_version":"1.28.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"pydantic-core","old_version":"2.46.2","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pypdfium2","old_version":"5.8.0","new_version":"5.12.1","repository_url":"https://github.com/pypdfium2-team/pypdfium2"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.69.0","repository_url":"https://github.com/tqdm/tqdm"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"websockets","old_version":"16.0","new_version":"16.1.1","repository_url":"https://github.com/python-websockets/websockets"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-patch-minor group with 37 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.139.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.51.0` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.31` | `0.0.32` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.18.4` | `1.18.5` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.51` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.2` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.24.10` | `1.28.0` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.3` | `6.14.2` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n| [openai](https://github.com/openai/openai-python) | `2.32.0` | `2.46.0` |\n| [google-genai](https://github.com/googleapis/python-genai) | `2.10.0` | `2.13.0` |\n| [google-cloud-vision](https://github.com/googleapis/google-cloud-python) | `3.14.0` | `3.15.0` |\n| [playwright](https://github.com/microsoft/playwright-python) | `1.60.0` | `1.61.0` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.22` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.0` | `7.15.2` |\n| [httpx2](https://github.com/pydantic/httpx2) | `2.4.0` | `2.7.0` |\n| [pip-audit](https://github.com/pypa/pip-audit) | `2.10.0` | `2.10.1` |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.2` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.7.22` |\n| [cffi](https://github.com/python-cffi/cffi) | `2.0.0` | `2.1.0` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.7` | `3.4.9` |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [google-api-core](https://github.com/googleapis/google-cloud-python) | `2.30.3` | `2.32.0` |\n| [google-api-python-client](https://github.com/googleapis/google-api-python-client) | `2.196.0` | `2.198.0` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.53.0` | `2.56.2` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.1` | `3.5.3` |\n| [grpcio](https://github.com/grpc/grpc) | `1.80.0` | `1.82.1` |\n| [grpcio-status](https://grpc.io) | `1.71.2` | `1.82.1` |\n| [idna](https://github.com/kjd/idna) | `3.16` | `3.18` |\n| [jiter](https://github.com/pydantic/jiter) | `0.15.0` | `0.16.0` |\n| [proto-plus](https://github.com/googleapis/google-cloud-python) | `1.28.0` | `1.28.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.2` | `2.47.0` |\n| [pypdfium2](https://github.com/pypdfium2-team/pypdfium2) | `5.8.0` | `5.12.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.69.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [websockets](https://github.com/python-websockets/websockets) | `16.0` | `16.1.1` |\n\n\nUpdates `fastapi` from 0.136.1 to 0.139.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapi/fastapi/releases\"\u003efastapi's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.139.2\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Refactor router route building to make it thread-safe, mainly relevant for tests running in parallel threads (uncommon). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16013\"\u003e#16013\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.139.1\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16011\"\u003e#16011\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocs\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being applied. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15995\"\u003e#15995\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eTranslations\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16005\"\u003e#16005\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh-hant (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15996\"\u003e#15996\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for fr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16006\"\u003e#16006\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for de (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15999\"\u003e#15999\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ko (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16004\"\u003e#16004\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for zh (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16001\"\u003e#16001\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for uk (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16003\"\u003e#16003\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ja (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15998\"\u003e#15998\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for pt (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16000\"\u003e#16000\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for es (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15997\"\u003e#15997\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for ru (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/16002\"\u003e#16002\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15990\"\u003e#15990\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15925\"\u003e#15925\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for hi (add-missing). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15797\"\u003e#15797\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update \u003ccode\u003ellm-prompt.md\u003c/code\u003e for Hindi. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15810\"\u003e#15810\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Fix language-specific translation prompt for Russian language. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15924\"\u003e#15924\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e⬆ Bump the python-packages group across 1 directory with 6 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15981\"\u003e#15981\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump typing-extensions from 4.15.0 to 4.16.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15982\"\u003e#15982\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the github-actions group across 1 directory with 4 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15983\"\u003e#15983\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump pre-commit hooks. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15985\"\u003e#15985\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Use \u003ccode\u003eFASTAPI_LATEST_CHANGES\u003c/code\u003e token in \u003ccode\u003ebump-pre-commit-hooks\u003c/code\u003e workflow. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15984\"\u003e#15984\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Add GH workflow to bump pre-commit hook versions. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15873\"\u003e#15873\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Set Dependabot schedule interval to \u0026quot;monthly\u0026quot;. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15874\"\u003e#15874\u003c/a\u003e by \u003ca href=\"https://github.com/YuriiMotov\"\u003e\u003ccode\u003e@​YuriiMotov\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump CodSpeedHQ/action from 4.17.6 to 4.18.1 in the github-actions group. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15950\"\u003e#15950\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump the python-packages group with 8 updates. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15952\"\u003e#15952\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: add TutorCruncher. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15947\"\u003e#15947\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix notify translations checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15933\"\u003e#15933\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e👷 Fix latest-changes checkout target. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15932\"\u003e#15932\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔧 Update sponsors: remove RapidProxy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15929\"\u003e#15929\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update issue-manager to 0.8.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15928\"\u003e#15928\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆️ Update latest-changes to 0.6.1. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15926\"\u003e#15926\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/866b7a3d0ce1025a3811f23aea4846d01a2b16a8\"\u003e\u003ccode\u003e866b7a3\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16014\"\u003e#16014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b3effea754619f0c305af576be23a51865292a3\"\u003e\u003ccode\u003e7b3effe\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7fe315c21afb8a57a2b559772e0f7ced7e5d071a\"\u003e\u003ccode\u003e7fe315c\u003c/code\u003e\u003c/a\u003e 🐛 Refactor router route building to make it thread-safe, mainly relevant for ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c48e67b1ce9c03fc9bd4b1ac72350e51ad5a6e8a\"\u003e\u003ccode\u003ec48e67b\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.139.1 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16012\"\u003e#16012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/2acc4fbf155caf016e3bd2602c0d2ec52723e635\"\u003e\u003ccode\u003e2acc4fb\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/eb75fd078e83aed935016bcdf0705cd58bbf0d0e\"\u003e\u003ccode\u003eeb75fd0\u003c/code\u003e\u003c/a\u003e 🐛 Fix frontend fallback support for doted paths like \u003ccode\u003e/users/john.doe\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/16011\"\u003e#16011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/9b8410bdc9fa1fd679ea7e65b926535c7045ab87\"\u003e\u003ccode\u003e9b8410b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/e24d44cce4092a33b64e9536e96e7608a7dcb9b8\"\u003e\u003ccode\u003ee24d44c\u003c/code\u003e\u003c/a\u003e 📝 Fix topic repository list not being displayed and \u003ccode\u003eskip_users\u003c/code\u003e not being ap...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/93b78f8646dea4543cc4d938f7e29b8547749a99\"\u003e\u003ccode\u003e93b78f8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b959b443577c5f2b870cdef13219b98aa32f8943\"\u003e\u003ccode\u003eb959b44\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.139.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.47.0 to 0.51.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.51.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers with overlap on SIGHUP for near-zero-downtime reloads by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3025\"\u003eKludex/uvicorn#3025\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove colorama from the standard extra by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3027\"\u003eKludex/uvicorn#3027\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.2...0.51.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansio implementation by \u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Aayush7352\"\u003e\u003ccode\u003e@​Aayush7352\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3019\"\u003eKludex/uvicorn#3019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.50.0...0.50.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.50.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMemoize trusted host checks to avoid re-parsing the client IP per request by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2970\"\u003eKludex/uvicorn#2970\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache the \u003ccode\u003easgi\u003c/code\u003e scope sub-dict per connection by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2976\"\u003eKludex/uvicorn#2976\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBuild a fresh \u003ccode\u003easgi\u003c/code\u003e scope dict per request by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2977\"\u003eKludex/uvicorn#2977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace click.style with an internal ANSI style helper by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2981\"\u003eKludex/uvicorn#2981\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid copying single-frame WebSocket payloads in websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2983\"\u003eKludex/uvicorn#2983\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecate the legacy websockets implementation and default \u003ccode\u003eauto\u003c/code\u003e to websockets-sansio by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2985\"\u003eKludex/uvicorn#2985\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExit with a dedicated code on startup failure and stop the supervisor when a worker can't boot by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3001\"\u003eKludex/uvicorn#3001\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip the eager app import in the parent when spawning workers by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/3012\"\u003eKludex/uvicorn#3012\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.49.0...0.50.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2971\"\u003eKludex/uvicorn#2971\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md\"\u003euvicorn's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.51.0 (July 8, 2026)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRestart workers one at a time on \u003ccode\u003eSIGHUP\u003c/code\u003e, bringing each replacement up before retiring the old worker, so reloads no longer drop requests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRemoved\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove \u003ccode\u003ecolorama\u003c/code\u003e from the \u003ccode\u003estandard\u003c/code\u003e extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.2 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire \u003ccode\u003ewebsockets\u0026gt;=13.0\u003c/code\u003e, which the default \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation needs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.1 (July 6, 2026)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSplit comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3019\"\u003e#3019\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.50.0 (July 4, 2026)\u003c/h2\u003e\n\u003cp\u003eIf you use WebSockets, note that \u003ccode\u003e--ws auto\u003c/code\u003e now picks the \u003ccode\u003ewebsockets-sansio\u003c/code\u003e implementation. You shouldn't need it, but you can pin \u003ccode\u003e--ws websockets\u003c/code\u003e to get the deprecated legacy one back.\u003c/p\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eExit with the dedicated code 3 on any startup failure: app loading, socket bind and lifespan startup errors previously exited with a mix of 0, 1 and 3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop the multiprocess supervisor when a worker exits with code 3 instead of restarting it forever (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3001\"\u003e#3001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefault \u003ccode\u003e--ws auto\u003c/code\u003e to \u003ccode\u003ewebsockets-sansio\u003c/code\u003e when websockets is installed (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip the eager app import in the parent process with \u003ccode\u003e--reload\u003c/code\u003e or \u003ccode\u003e--workers\u003c/code\u003e, fixing a memory regression introduced in 0.47.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBuild a fresh \u003ccode\u003easgi\u003c/code\u003e scope dict per request (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2977\"\u003e#2977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCache the \u003ccode\u003easgi\u003c/code\u003e scope sub-dict per connection (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2976\"\u003e#2976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid copying single-frame WebSocket payloads in \u003ccode\u003ewebsockets-sansio\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2983\"\u003e#2983\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMemoize trusted host checks in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2970\"\u003e#2970\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003eclick.style\u003c/code\u003e with an internal ANSI style helper (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2981\"\u003e#2981\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDeprecate the legacy \u003ccode\u003ewebsockets\u003c/code\u003e implementation; use \u003ccode\u003ewebsockets-sansio\u003c/code\u003e or \u003ccode\u003ewsproto\u003c/code\u003e instead (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2985\"\u003e#2985\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.49.0 (June 3, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003ehttptools\u003c/code\u003e minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (reverses the 0.48.0 behavior of ignoring them) (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/e4d0b05eb8c6459b7ba27ad13a2c2f4f8d4ece50\"\u003e\u003ccode\u003ee4d0b05\u003c/code\u003e\u003c/a\u003e Version 0.51.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3028\"\u003e#3028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/944e43ddbf715aea7c587f2738cd94c3f9106110\"\u003e\u003ccode\u003e944e43d\u003c/code\u003e\u003c/a\u003e Remove colorama from the standard extra (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3027\"\u003e#3027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2e787704f2610133059e76d56bbd60f48edd34a3\"\u003e\u003ccode\u003e2e78770\u003c/code\u003e\u003c/a\u003e Restart workers with overlap on SIGHUP for near-zero-downtime reloads (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3025\"\u003e#3025\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/a1b570cf577d512bfd396b64d72313233e9c3325\"\u003e\u003ccode\u003ea1b570c\u003c/code\u003e\u003c/a\u003e Version 0.50.2 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3022\"\u003e#3022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/83c7da7332ac3100171c258071de40d5dde35e13\"\u003e\u003ccode\u003e83c7da7\u003c/code\u003e\u003c/a\u003e Require websockets\u0026gt;=13.0 for the default sansio implementation (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3021\"\u003e#3021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/b4d011668a75d02370353f34de6dea59692dcad2\"\u003e\u003ccode\u003eb4d0116\u003c/code\u003e\u003c/a\u003e Version 0.50.1 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/2a9151d0e763df2c56da2bfe8c5dcead4fe5a276\"\u003e\u003ccode\u003e2a9151d\u003c/code\u003e\u003c/a\u003e Split comma-separated \u003ccode\u003eSec-WebSocket-Protocol\u003c/code\u003e values in the websockets-sansi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/1bf3ab42e3aba1cf4acd1ef0c29d8ad9a599d333\"\u003e\u003ccode\u003e1bf3ab4\u003c/code\u003e\u003c/a\u003e Cover the excluded-directory branch in \u003ccode\u003eFileFilter\u003c/code\u003e with a direct test (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/837b5f960dbe2f03e9f12feb9955ce2217211ad8\"\u003e\u003ccode\u003e837b5f9\u003c/code\u003e\u003c/a\u003e Deflake multiprocess, reload, and signal supervisor tests (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2975\"\u003e#2975\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/21d2c16fd162ce0e92b5c35f4aadca63a8b12e2d\"\u003e\u003ccode\u003e21d2c16\u003c/code\u003e\u003c/a\u003e Version 0.50.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/3013\"\u003e#3013\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.51.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `python-multipart` from 0.0.31 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003eKludex/python-multipart#300\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.18.4 to 1.18.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.5\u003c/h1\u003e\n\u003cp\u003eReleased: June 25, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [commands]\u003c/strong\u003e Added \u003ccode\u003e--splice\u003c/code\u003e support to the \u003ccode\u003emerge()\u003c/code\u003e command. Previously, the\nmerge command would suggest using \u003ccode\u003e--splice\u003c/code\u003e when attempting to merge\nnon-head revisions, but the flag was not actually accepted by the command.\nThe \u003ccode\u003esplice\u003c/code\u003e parameter is now available in both the command-line\ninterface and the \u003ccode\u003ecommand.merge()\u003c/code\u003e function, matching the existing\nsupport in \u003ccode\u003ecommand.revision()\u003c/code\u003e.  Pull request courtesy Kadir Can\nOzden.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1712\"\u003e#1712\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [environment]\u003c/strong\u003e Added \u003ccode\u003eScriptDirectory.get_heads.consider_depends_on\u003c/code\u003e\nparameter to \u003ccode\u003eScriptDirectory.get_heads()\u003c/code\u003e. When set to \u003ccode\u003eTrue\u003c/code\u003e,\nhead revisions that are also a dependency of another revision via\n\u003ccode\u003edepends_on\u003c/code\u003e are excluded from the result, matching the effective\nheads that would be present in the \u003ccode\u003ealembic_version\u003c/code\u003e table after\nrunning all upgrades.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1806\"\u003e#1806\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed rendering of dialect keyword arguments containing\n\u003ccode\u003e~sqlalchemy.schema.Column\u003c/code\u003e objects within sequences, such as\n\u003ccode\u003epostgresql_include\u003c/code\u003e.  These were previously rendered using \u003ccode\u003erepr()\u003c/code\u003e,\nproducing invalid Python in the generated migration scripts.  Column\nobjects within list or tuple values are now correctly rendered as their\nstring column names.  Pull request courtesy Ajay Singh.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1258\"\u003e#1258\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [mysql]\u003c/strong\u003e Implemented type comparison for \u003ccode\u003eENUM\u003c/code\u003e datatypes on MySQL, which\nchecks that the individual enum values are equivalent.  If additional\nentries are on either side, this generates a diff.  Changes of order do not\ngenerate a diff.  Pull request courtesy Furkan Köykıran.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1745\"\u003e#1745\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/779\"\u003e#779\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Fixed bug where the \u003ccode\u003einline_references\u003c/code\u003e parameter of\n\u003ccode\u003eOperations.add_column()\u003c/code\u003e did not include foreign key referential\nactions such as \u003ccode\u003eON DELETE\u003c/code\u003e, \u003ccode\u003eON UPDATE\u003c/code\u003e, \u003ccode\u003eDEFERRABLE\u003c/code\u003e,\n\u003ccode\u003eINITIALLY\u003c/code\u003e, and \u003ccode\u003eMATCH\u003c/code\u003e when rendering the inline \u003ccode\u003eREFERENCES\u003c/code\u003e\nclause.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `sqlalchemy` from 2.0.49 to 2.0.51\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/releases\"\u003esqlalchemy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e2.0.51\u003c/h1\u003e\n\u003cp\u003eReleased: June 15, 2026\u003c/p\u003e\n\u003ch2\u003eorm\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_orm.subqueryload()\u003c/code\u003e combined with\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e and \u003ccode\u003ePropComparator.and_()\u003c/code\u003e would\nsilently drop the additional filter criteria, causing all related objects\nto be loaded instead of only those matching the filter.  The\n\u003ccode\u003eLoaderCriteriaOption\u003c/code\u003e was being constructed against the base\nentity rather than the effective entity indicated by\n\u003ccode\u003ePropComparator.of_type()\u003c/code\u003e.  Pull request courtesy Arya Rizky.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13207\"\u003e#13207\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[orm] [bug]\u003c/strong\u003e Fixed bug where a failure during \u003ccode\u003etpc_prepare()\u003c/code\u003e within\n\u003ccode\u003e_orm.Session.commit()\u003c/code\u003e for a two-phase session would raise\n\u003ccode\u003eIllegalStateChangeError\u003c/code\u003e instead of the original database\nexception.  The internal \u003ccode\u003e_prepare_impl()\u003c/code\u003e method's error handler\nwas unable to invoke \u003ccode\u003e_orm.SessionTransaction.rollback()\u003c/code\u003e due\nto a state-change guard, preventing proper cleanup and masking the\nunderlying error.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/13356\"\u003e#13356\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eengine\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[engine] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003eResult.freeze()\u003c/code\u003e would lose track of ambiguous\ncolumn names present in the original \u003ccode\u003eCursorResult\u003c/code\u003e, causing\nkey-based access on the thawed result to silently return a value instead of\nraising \u003ccode\u003eInvalidRequestError\u003c/code\u003e.  The\n\u003ccode\u003eSimpleResultMetaData\u003c/code\u003e now accepts and propagates ambiguous key\ninformation so that frozen, thawed, and pickled results raise consistently\nfor duplicate column names.  Pull request courtesy Saurabh Kohli.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/9427\"\u003e#9427\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003esql\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[sql] [bug]\u003c/strong\u003e Fixed issue where \u003ccode\u003e_sql.StatementLambdaElement\u003c/code\u003e would proxy\nattribute access through the cached \u0026quot;expected\u0026quot; expression rather than the\nresolved expression, causing stale closure-bound parameter values to be\nused when a lambda statement was extended with non-lambda criteria such as\nan additional \u003ccode\u003e.where()\u003c/code\u003e clause.  Courtesy cjc0013.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://www.sqlalchemy.org/trac/ticket/10827\"\u003e#10827\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/sqlalchemy/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.2 to 2.13.4\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/releases\"\u003epydantic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 2026-05-06\u003c/h2\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.13.3 2026-04-20\u003c/h2\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\"\u003ehttps://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.13.3 (2026-04-20)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.3\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eHandle \u003ccode\u003eAttributeError\u003c/code\u003e subclasses with \u003ccode\u003efrom_attributes\u003c/code\u003e by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13096\"\u003e#13096\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/cf67d4b3193c3fe43ede18612ed62785eee11382\"\u003e\u003ccode\u003ecf67d4b\u003c/code\u003e\u003c/a\u003e Fix linting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/f0d8a214a5803036db46a56b1f62f1e56b81d662\"\u003e\u003ccode\u003ef0d8a21\u003c/code\u003e\u003c/a\u003e Prepare release v2.13.4\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/5e3fe1d41a00f441204241c66078003ae0391f9a\"\u003e\u003ccode\u003e5e3fe1d\u003c/code\u003e\u003c/a\u003e Check for pydantic tag pattern in CI\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/7f9edcc2a191d2eaa9751220eb910914e716a686\"\u003e\u003ccode\u003e7f9edcc\u003c/code\u003e\u003c/a\u003e Document tagging conventions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/b46a0c9b8a4dd967fda8ec1a92f6437076bf262c\"\u003e\u003ccode\u003eb46a0c9\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/50629c851e61d887d5420452c311ec6203f1f400\"\u003e\u003ccode\u003e50629c8\u003c/code\u003e\u003c/a\u003e Update to PyPy 7.3.22\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/8522ebb71e5e9a6f7188af5f009f01785b8cf725\"\u003e\u003ccode\u003e8522ebb\u003c/code\u003e\u003c/a\u003e Preserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/a37f3aff090ca342dc5f48304889963530b993f8\"\u003e\u003ccode\u003ea37f3af\u003c/code\u003e\u003c/a\u003e Adapt \u003ccode\u003eMISSING\u003c/code\u003e sentinel test to work with unreleased \u003ccode\u003etyping_extensions\u003c/code\u003e ver...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/909259a9df660518033aa686b689f045a6eaf9d2\"\u003e\u003ccode\u003e909259a\u003c/code\u003e\u003c/a\u003e Remove Logfire example in documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic/commit/2c4174c366606fc2dc46cb806833a080aefa77df\"\u003e\u003ccode\u003e2c4174c\u003c/code\u003e\u003c/a\u003e Bump libc from 0.2.155 to 0.2.185\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymupdf` from 1.24.10 to 1.28.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/pymupdf/releases\"\u003epymupdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.3 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4928\"\u003e#4928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4942\"\u003e#4942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4954\"\u003e#4954\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4958\"\u003e#4958\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on\n\u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4902\"\u003e#4902\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4932\"\u003e#4932\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eAnnot.__bool__()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePyMuPDF-1.27.2 released\u003c/h2\u003e\n\u003cp\u003eWheels for Windows, Linux and MacOS, and the sdist, are available on \u003ca href=\"https://pypi.org\"\u003ehttps://pypi.org\u003c/a\u003e and can be installed in the usual way, for example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pymupdf\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2\u003c/strong\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pymupdf/PyMuPDF/blob/main/changes.txt\"\u003epymupdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChange Log\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.28.0\u003c/strong\u003e (2026-06-29)\u003c/p\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4114 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4114\u0026gt;\u003c/code\u003e_: ComboBox choice_values full of empty strings despite PDF having valid choices.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4950 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4950\u0026gt;\u003c/code\u003e_: remove_rotation() raises ValueError on widgets with empty/infinite rects\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e5001 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/5001\u0026gt;\u003c/code\u003e_: Formulae incorrectly rendered as black boxes\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e5033 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/5033\u0026gt;\u003c/code\u003e_: Annot.set_rotation(0) followed by Annot.update() throws AttributeError\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse MuPDF-1.28.0.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.\u003cstrong\u003einit\u003c/strong\u003e(): new arg \u003ccode\u003earchive\u003c/code\u003e to support documents with archives.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.convert_to_pdf(): also generate links.\u003c/li\u003e\n\u003cli\u003eFixed MacOS x64 platform tag - used to be macosx_10_9_x86_64, but we actually\nrequire MacOS 10.15, so platform tag is now macosx_10_15_x86_64.\u003c/li\u003e\n\u003cli\u003eSupport Windows builds with free thread python.\u003c/li\u003e\n\u003cli\u003epymupdf.Document.save() now saves non-PDF documents in PDF format.\u003c/li\u003e\n\u003cli\u003eNew method pymupdf.Document.apply_css().\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.3\u003c/strong\u003e (2026-04-24)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4928 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4928\u0026gt;\u003c/code\u003e_: pymupdf.Document.scrub raises AttributeError for a document with annotations\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4942 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4942\u0026gt;\u003c/code\u003e_: bug: IndexError for Page.get_links after Page.clip_to_rect\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4954 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4954\u0026gt;\u003c/code\u003e_: get_drawings() returns incorrect lineJoin and width\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4958 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4958\u0026gt;\u003c/code\u003e_: bug: inserting rotated pages to another document messes up link coordinates\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFixed incorrect generation of \u003ccode\u003elineJoin j\u003c/code\u003e in PDF content, introduced in 1.27.2.2.\u003c/li\u003e\n\u003cli\u003eAllow build to (incorrectly) claim to be thread-safe, for \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4760\"\u003e#4760\u003c/a\u003e. See setup.py for details.\u003c/li\u003e\n\u003cli\u003eUse pypi.org's pipcl package instead of our own pipcl.py file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanges in version 1.27.2.2\u003c/strong\u003e (2026-03-20)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFixed issues:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4902 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4902\u0026gt;\u003c/code\u003e_: Incorrect linewidth in elements returned by Page.get_texttrace()\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFixed\u003c/strong\u003e \u003ccode\u003e4932 \u0026lt;https://github.com/pymupdf/PyMuPDF/issues/4932\u0026gt;\u003c/code\u003e_: \u0026quot;Page\u0026quot; has no attribute \u0026quot;find_tables\u0026quot; in PyMuPDF 1.27\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eOther:\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/e9cdfc9e7fe3260efcc9d28713903f075ab05bce\"\u003e\u003ccode\u003ee9cdfc9\u003c/code\u003e\u003c/a\u003e changes.txt: fix mupdf version number.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/629a3582fd31d352f042c9f444b984d8ed22e449\"\u003e\u003ccode\u003e629a358\u003c/code\u003e\u003c/a\u003e docs/document.rst: add new in 1.28.0 to \u003cstrong\u003einit\u003c/strong\u003e's archive.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/7264f27eecc53dcfe0401d3ba97c10b1aa97669d\"\u003e\u003ccode\u003e7264f27\u003c/code\u003e\u003c/a\u003e README.md: updated example conversion from md to pdf.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/119a0bca69156375494eacff9725bb0221fa9b19\"\u003e\u003ccode\u003e119a0bc\u003c/code\u003e\u003c/a\u003e docs/document.rst: document that save() now also works for non-pdf documents.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/5ebfc4c03195b56e5ed62d45c895823354b92af7\"\u003e\u003ccode\u003e5ebfc4c\u003c/code\u003e\u003c/a\u003e setup.py: use mupdf-1.28.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/14d8fac83f51b6659015066d5a57ce72b9209438\"\u003e\u003ccode\u003e14d8fac\u003c/code\u003e\u003c/a\u003e changes.txt: removed bogus \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/4423\"\u003e#4423\u003c/a\u003e entry, added \u003ca href=\"https://redirect.github.com/pymupdf/pymupdf/issues/5033\"\u003e#5033\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d9616168f3d23779b7289acdb0950544f6795031\"\u003e\u003ccode\u003ed961616\u003c/code\u003e\u003c/a\u003e tests/test_annots.py: added test_5033() for setRect() vs set_rect() bug.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/d91bd63304edc6685c9561e923e2fda30d603e9f\"\u003e\u003ccode\u003ed91bd63\u003c/code\u003e\u003c/a\u003e changes.txt: added note about save() and non-pdf documents.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/fd409de6680d9a4532ac07560d724d7dc2833b43\"\u003e\u003ccode\u003efd409de\u003c/code\u003e\u003c/a\u003e .github/workflows/: updated to use mupdf branch 1.28.x.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pymupdf/PyMuPDF/commit/04aa7dd994f282b1835ac01784b80bd66ce4b09c\"\u003e\u003ccode\u003e04aa7dd\u003c/code\u003e\u003c/a\u003e Remove old setRect Name\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pymupdf/pymupdf/compare/1.24.10...1.28.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pypdf` from 6.13.3 to 6.14.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/releases\"\u003epypdf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.14.2, 2026-06-23\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3892\"\u003e#3892\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.1...6.14.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.1, 2026-06-23\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.0...6.14.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.0, 2026-06-22\u003c/h2\u003e\n\u003ch2\u003eWhat's new\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApply general limit for requested image size (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3888\"\u003e#3888\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSpeed up recovery when reading broken cross-reference table (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3887\"\u003e#3887\u003c/a\u003e) by \u003ca href=\"https://github.com/stefan6419846\"\u003e\u003ccode\u003e@​stefan6419846\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck whether image is displayed on a given page (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3738\"\u003e#3738\u003c/a\u003e) by \u003ca href=\"https://github.com/andreasntr\"\u003e\u003ccode\u003e@​andreasntr\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSeveral fixes by \u003ca href=\"https://github.com/metsw24-max\"\u003e\u003ccode\u003e@​metsw24-max\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/py-pdf/pypdf/blob/main/CHANGELOG.md\"\u003epypdf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.14.2, 2026-06-23\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3892\"\u003e#3892\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.1...6.14.2\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.1, 2026-06-23\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.14.0...6.14.1\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.14.0, 2026-06-22\u003c/h2\u003e\n\u003ch3\u003eSecurity (SEC)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eApply general limit for requested image size (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3888\"\u003e#3888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSpeed up recovery when reading broken cross-reference table (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3887\"\u003e#3887\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features (ENH)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCheck whether image is displayed on a given page (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3738\"\u003e#3738\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRobustness (ROB)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSeveral fixes\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/2266ee853d1420c8774f6657ce3b8f1502cac713\"\u003e\u003ccode\u003e2266ee8\u003c/code\u003e\u003c/a\u003e REL: 6.14.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/5a33a46416aa1ae6c025ff90a3cca57631fdafd2\"\u003e\u003ccode\u003e5a33a46\u003c/code\u003e\u003c/a\u003e SEC: Avoid infinite loops for incomplete ASCII85 and ASCIIHex inline images (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/1ee4e58bea04bfca119c7c2fe29d8167dcddcb81\"\u003e\u003ccode\u003e1ee4e58\u003c/code\u003e\u003c/a\u003e REL: 6.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/ec3b14596186c40caca7cf8ab9b2155203e01b5b\"\u003e\u003ccode\u003eec3b145\u003c/code\u003e\u003c/a\u003e SEC: Detect end of stream during inline image end marker detection (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3891\"\u003e#3891\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/c6cd82e82e4906ff29eeeea0e5b81ae38b00be9c\"\u003e\u003ccode\u003ec6cd82e\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed inline image settings in _read_inline_image (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3889\"\u003e#3889\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/0ae42ba0f683e26c76968529a94905587c181010\"\u003e\u003ccode\u003e0ae42ba\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed page label entries in get_label_from_nums (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3884\"\u003e#3884\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/50617b5fae0138a30995eebec169d7e63e3ed797\"\u003e\u003ccode\u003e50617b5\u003c/code\u003e\u003c/a\u003e ROB: Tolerate malformed Tm operand count in extract_text (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3877\"\u003e#3877\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/86e5a82471587570c269194e5220d588b06a1119\"\u003e\u003ccode\u003e86e5a82\u003c/code\u003e\u003c/a\u003e MAINT: Improve readability (\u003ca href=\"https://redirect.github.com/py-pdf/pypdf/issues/3874\"\u003e#3874\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/83cb25f33f41abcbec59e7866e9530b93b7c1ae3\"\u003e\u003ccode\u003e83cb25f\u003c/code\u003e\u003c/a\u003e DEV: Fix sample files commit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/py-pdf/pypdf/commit/06588ecb5127fe08045e10fa0f227f231ad259ee\"\u003e\u003ccode\u003e06588ec\u003c/code\u003e\u003c/a\u003e REL: 6.14.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/py-pdf/pypdf/compare/6.13.3...6.14.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pdfplumber` from 0.11.9 to 0.11.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/releases\"\u003epdfplumber's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.11.10\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/blob/stable/CHANGELOG.md\"\u003epdfplumber's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.11.10] — 2026-06-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7d4f2f582f2d99f9e60ba522fdf7afd2f6d54c62\"\u003e\u003ccode\u003e7d4f2f5\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b2f8f6fd7f7f92b73d2f1f9350b6e7e9d2\"\u003e\u003ccode\u003e1e6de0b\u003c/code\u003e\u003c/a\u003e Upgrade dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/91b2b6cbca6efd8b94cc44f942385b1047f00661\"\u003e\u003ccode\u003e91b2b6c\u003c/code\u003e\u003c/a\u003e Appease linter/coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/98041536932ce85d18a1fba80d9db0686b831d9d\"\u003e\u003ccode\u003e9804153\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ebafd6e9cb81afcfee0e4d79d119d3058490467a\"\u003e\u003ccode\u003eebafd6e\u003c/code\u003e\u003c/a\u003e Update Python versions in setup.py classifiers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/fc2c9a9001415ebf7b7221eb89db4cb7d2f65fc8\"\u003e\u003ccode\u003efc2c9a9\u003c/code\u003e\u003c/a\u003e Fix list of tested Python versions in README \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1355\"\u003e#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff65d4c92b648bf306e3e782e481258b6c6d\"\u003e\u003ccode\u003e07a5ff6\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251230 to 20260107\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ec96f7256dde1ccad940c19bf9eb97ddb98cfae6\"\u003e\u003ccode\u003eec96f72\u003c/code\u003e\u003c/a\u003e Update Makefile\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jsvine/pdfplumber/compare/v0.11.9...v0.11.10\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.32.0 to 2.46.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/openai/openai-python/releases\"\u003eopenai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.46.0\u003c/h2\u003e\n\u003ch2\u003e2.46.0 (2026-07-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.45.0...v2.46.0\"\u003ev2.45.0...v2.46.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e /organization/projects/{project_id}/service_accounts/{...\n\n_Description has been truncated_","html_url":"https://github.com/skin306152-star/pearnly-app/pull/80","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/skin306152-star%2Fpearnly-app/issues/80","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/80/packages"}},{"old_version":"2026.4.22","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-07-19T15:43:21.000Z","version_change":"2026.4.22 → 2026.6.17","issue":{"uuid":"4923313252","node_id":"PR_kwDOL-Yf2s7zkFYj","number":195,"state":"open","title":"chore(deps): bump certifi from 2026.4.22 to 2026.6.17","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-19T15:43:21.000Z","updated_at":"2026-07-19T15:43:28.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"certifi","old_version":"2026.4.22","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"}],"path":null,"ecosystem":"pip"},"body":"Bumps [certifi](https://github.com/certifi/python-certifi) from 2026.4.22 to 2026.6.17.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi\u0026package-manager=pip\u0026previous-version=2026.4.22\u0026new-version=2026.6.17)](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/grisuno/LazyOwn/pull/195","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/grisuno%2FLazyOwn/issues/195","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/195/packages"}},{"old_version":"2020.6.20","new_version":"2024.7.4","update_type":"major","path":null,"pr_created_at":"2026-07-17T06:24:57.000Z","version_change":"2020.6.20 → 2024.7.4","issue":{"uuid":"4908666989","node_id":"PR_kwDOTV049M7y14G3","number":1,"state":"closed","title":"Bump the pip group across 1 directory with 3 updates","user":"dependabot[bot]","labels":["dependencies","python","gitar-approved"],"assignees":[],"locked":false,"comments_count":5,"pull_request":true,"closed_at":"2026-07-17T06:25:48.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-17T06:24:57.000Z","updated_at":"2026-07-17T06:27:33.000Z","time_to_close":51,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip","update_count":3,"packages":[{"name":"certifi","old_version":"2020.6.20","new_version":"2024.7.4","repository_url":"https://github.com/certifi/python-certifi"},{"name":"requests","old_version":"2.24.0","new_version":"2.33.0","repository_url":"https://github.com/psf/requests"},{"name":"urllib3","old_version":"1.25.10","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 3 updates in the /utils directory: [certifi](https://github.com/certifi/python-certifi), [requests](https://github.com/psf/requests) and [urllib3](https://github.com/urllib3/urllib3).\n\nUpdates `certifi` from 2020.6.20 to 2024.7.4\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/bd8153872e9c6fc98f4023df9c2deaffea2fa463\"\u003e\u003ccode\u003ebd81538\u003c/code\u003e\u003c/a\u003e 2024.07.04 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/06a2cbf21f345563dde6c28b60e29d57e9b210b3\"\u003e\u003ccode\u003e06a2cbf\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 6.0.5 to 6.1.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/13bba02b72bac97c432c277158bc04b4d2a6bc23\"\u003e\u003ccode\u003e13bba02\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.1.6 to 4.1.7 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/e8abcd0e62b334c164b95d49fcabdc9ecbca0554\"\u003e\u003ccode\u003ee8abcd0\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.8.14 to 1.9.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/292\"\u003e#292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/124f4adf171e15cd9a91a8b6e0325ecc97be8fe1\"\u003e\u003ccode\u003e124f4ad\u003c/code\u003e\u003c/a\u003e 2024.06.02 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/291\"\u003e#291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/c2196ce5d6ee675b27755a19948480a7823e2c6a\"\u003e\u003ccode\u003ec2196ce\u003c/code\u003e\u003c/a\u003e --- (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/290\"\u003e#290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/fefdeec7588ff1c05214b85a552afcad5fdb51b2\"\u003e\u003ccode\u003efefdeec\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.1.4 to 4.1.5 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/289\"\u003e#289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/3c5fb1560b826a7f83f1f9750173ff766492c9cf\"\u003e\u003ccode\u003e3c5fb15\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 4.1.6 to 4.1.7 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/286\"\u003e#286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/4a9569a3eb58db8548536fc16c5c5c7af946a5b1\"\u003e\u003ccode\u003e4a9569a\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 4.1.2 to 4.1.4 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/287\"\u003e#287\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/1fc808626a895a916b1e4c2b63abae6c5eafdbe3\"\u003e\u003ccode\u003e1fc8086\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 6.0.4 to 6.0.5 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/288\"\u003e#288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2020.06.20...2024.07.04\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.24.0 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\u003ch2\u003ev2.32.5\u003c/h2\u003e\n\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.32.4\u003c/h2\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\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/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\u003ch2\u003e2.32.5 (2025-08-18)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe SSLContext caching feature originally introduced in 2.32.0 has created\na new class of issues in Requests that have had negative impact across a number\nof use cases. The Requests team has decided to revert this feature as long term\nmaintenance of it is proving to be unsustainable in its current iteration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDeprecations\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for Python 3.14.\u003c/li\u003e\n\u003cli\u003eDropped support for Python 3.8 following its end of support.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.32.4 (2025-06-10)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eSecurity\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCVE-2024-47081 Fixed an issue where a maliciously crafted URL and trusted\nenvironment will retrieve credentials for the wrong hostname/machine from a\nnetrc file.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.24.0...v2.33.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `urllib3` from 1.25.10 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/1.25.10...2.7.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\nYou can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/big-main/Mind-Expanding-Books/network/alerts).\n\n\u003c/details\u003e\n\n\u003c!-- This is an auto-generated comment: release notes by coderabbit.ai --\u003e\n\n## Summary by CodeRabbit\n\n* **Chores**\n  * Updated several bundled package versions, including security and networking components.\n  * Retained existing versions for unaffected packages.\n\n\u003c!-- end of auto-generated comment: release notes by coderabbit.ai --\u003e","html_url":"https://github.com/big-main/Mind-Expanding-Books/pull/1","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/big-main%2FMind-Expanding-Books/issues/1","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/1/packages"}},{"old_version":"2026.5.20","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-07-08T05:09:48.000Z","version_change":"2026.5.20 → 2026.6.17","issue":{"uuid":"4834532079","node_id":"PR_kwDOGsm9Mc7vILNw","number":554,"state":"open","title":"fix(dependabot): bump the uv-non-major group across 1 directory with 3 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-08T05:09:48.000Z","updated_at":"2026-07-08T05:33:59.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(dependabot): bump","group_name":"uv-non-major","update_count":3,"packages":[{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"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.19","repository_url":"https://github.com/astral-sh/ruff"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-non-major group with 3 updates in the /xtest directory: [certifi](https://github.com/certifi/python-certifi), [pytest](https://github.com/pytest-dev/pytest) and [ruff](https://github.com/astral-sh/ruff).\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 `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.19\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.19\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\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\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Note that \u003ccode\u003ePYI051\u003c/code\u003e is an opinionated stylistic rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26179\"\u003e#26179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Clarify \u003ccode\u003eUP029\u003c/code\u003e as a Python 2 compatibility rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26243\"\u003e#26243\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish Ruff crates to crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26271\"\u003e#26271\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/MakenRosa\"\u003e\u003ccode\u003e@​MakenRosa\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/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\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/sanjibani\"\u003e\u003ccode\u003e@​sanjibani\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.19\u003c/h2\u003e\n\u003ch3\u003eInstall prebuilt binaries via shell script\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/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.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\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Note that \u003ccode\u003ePYI051\u003c/code\u003e is an opinionated stylistic rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26179\"\u003e#26179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epyupgrade\u003c/code\u003e] Clarify \u003ccode\u003eUP029\u003c/code\u003e as a Python 2 compatibility rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26243\"\u003e#26243\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePublish Ruff crates to crates.io (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26271\"\u003e#26271\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/MakenRosa\"\u003e\u003ccode\u003e@​MakenRosa\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/trilamsr\"\u003e\u003ccode\u003e@​trilamsr\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/sanjibani\"\u003e\u003ccode\u003e@​sanjibani\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.15.18\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7f0436561d013b190b2a7ccad6f6ddda749102f9\"\u003e\u003ccode\u003e7f04365\u003c/code\u003e\u003c/a\u003e Bump version to 0.15.19 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26291\"\u003e#26291\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/a30ba16ebdeb7d3793feb69b343db79599cadd26\"\u003e\u003ccode\u003ea30ba16\u003c/code\u003e\u003c/a\u003e [ty] Infer definite equality comparison results (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26290\"\u003e#26290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/bcd202849101b95a722c834c9f316d5f49ffb5d9\"\u003e\u003ccode\u003ebcd2028\u003c/code\u003e\u003c/a\u003e [ty] Avoid recursion when projecting narrowing constraints (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26276\"\u003e#26276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c0e083eda863d5e3288b579adb3ca45b746f44cf\"\u003e\u003ccode\u003ec0e083e\u003c/code\u003e\u003c/a\u003e [ty] Avoid bypassing lazy constraints for Divergent (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26288\"\u003e#26288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/fb135968e1950f6c6d3de9d889041b8fe9d8d386\"\u003e\u003ccode\u003efb13596\u003c/code\u003e\u003c/a\u003e Record configured crates.io packages (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26281\"\u003e#26281\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/85da759b6a9aa93ccd8183556f040cf3687990d7\"\u003e\u003ccode\u003e85da759\u003c/code\u003e\u003c/a\u003e [ty] Fix ParamSpec callable signature extraction for callable instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26279\"\u003e#26279\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/4c98a818d5f10ad78f5f066042bbe3d4370c955a\"\u003e\u003ccode\u003e4c98a81\u003c/code\u003e\u003c/a\u003e [ty] Make multi-arm TypeOf cycle recovery monotonic (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26275\"\u003e#26275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/7b84361eec3b396476c209d9141fedc24490dd85\"\u003e\u003ccode\u003e7b84361\u003c/code\u003e\u003c/a\u003e [ty] Preserve regular kind for callable instances (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26253\"\u003e#26253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/93c8c59a62238e2e9240dae20b804c4091962adb\"\u003e\u003ccode\u003e93c8c59\u003c/code\u003e\u003c/a\u003e [\u003ccode\u003eflake8-pyi\u003c/code\u003e] Note that \u003ccode\u003ePYI051\u003c/code\u003e is an opinionated stylistic rule (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26179\"\u003e#26179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/bc9bb0598ba564bcc224cb90207d9ad8228ad796\"\u003e\u003ccode\u003ebc9bb05\u003c/code\u003e\u003c/a\u003e [ty] Infer types for names bound in match patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25940\"\u003e#25940\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.19\"\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/opentdf/tests/pull/554","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/opentdf%2Ftests/issues/554","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/554/packages"}},{"old_version":"2026.5.20","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-07-05T14:51:49.000Z","version_change":"2026.5.20 → 2026.6.17","issue":{"uuid":"4813279223","node_id":"PR_kwDORDrEC87uDnE5","number":220,"state":"closed","title":"chore(deps): bump the python-deps group across 1 directory with 24 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-06T00:22:01.000Z","author_association":null,"state_reason":null,"created_at":"2026-07-05T14:51:49.000Z","updated_at":"2026-07-06T00:22:02.000Z","time_to_close":34212,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-deps","update_count":24,"packages":[{"name":"aiohappyeyeballs","old_version":"2.6.2","new_version":"2.7.1","repository_url":"https://github.com/aio-libs/aiohappyeyeballs"},{"name":"anyio","old_version":"4.14.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"boto3","old_version":"1.43.30","new_version":"1.43.40","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.30","new_version":"1.43.40","repository_url":"https://github.com/boto/botocore"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.4.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"croniter","old_version":"6.0.0","new_version":"6.2.3","repository_url":"https://github.com/pallets-eco/croniter"},{"name":"google-auth","old_version":"2.55.0","new_version":"2.55.1","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-resource-manager","old_version":"1.17.0","new_version":"1.18.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"langchain","old_version":"1.3.9","new_version":"1.3.11","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-core","old_version":"1.4.7","new_version":"1.4.8","repository_url":"https://github.com/langchain-ai/langchain"},{"name":"langchain-google-genai","old_version":"4.2.5","new_version":"4.2.6","repository_url":"https://github.com/langchain-ai/langchain-google"},{"name":"langgraph","old_version":"1.2.5","new_version":"1.2.7","repository_url":"https://github.com/langchain-ai/langgraph"},{"name":"langsmith","old_version":"0.8.16","new_version":"0.9.7","repository_url":"https://github.com/langchain-ai/langsmith-sdk"},{"name":"msgpack","old_version":"1.2.0","new_version":"1.2.1","repository_url":"https://github.com/msgpack/msgpack-python"},{"name":"redis","old_version":"8.0.0","new_version":"8.0.1","repository_url":"https://github.com/redis/redis-py"},{"name":"s3transfer","old_version":"0.18.0","new_version":"0.19.0","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.63.0","new_version":"2.64.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"typing-extensions","old_version":"4.15.0","new_version":"4.16.0","repository_url":"https://github.com/python/typing_extensions"},{"name":"tzlocal","old_version":"5.4","new_version":"5.4.4","repository_url":"https://github.com/regebro/tzlocal"},{"name":"uuid-utils","old_version":"0.16.1","new_version":"0.16.2","repository_url":"https://github.com/aminalaee/uuid-utils"},{"name":"uvicorn","old_version":"0.49.0","new_version":"0.50.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.8.1","new_version":"0.8.2","repository_url":"https://github.com/jquast/wcwidth"},{"name":"xxhash","old_version":"3.7.0","new_version":"3.8.0","repository_url":"https://github.com/ifduyue/python-xxhash"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-deps group with 24 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [aiohappyeyeballs](https://github.com/aio-libs/aiohappyeyeballs) | `2.6.2` | `2.7.1` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.0` | `4.14.1` |\n| [boto3](https://github.com/boto/boto3) | `1.43.30` | `1.43.40` |\n| [botocore](https://github.com/boto/botocore) | `1.43.30` | `1.43.40` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.6.17` |\n| [click](https://github.com/pallets/click) | `8.4.1` | `8.4.2` |\n| [croniter](https://github.com/pallets-eco/croniter) | `6.0.0` | `6.2.3` |\n| [google-auth](https://github.com/googleapis/google-cloud-python) | `2.55.0` | `2.55.1` |\n| [google-cloud-resource-manager](https://github.com/googleapis/google-cloud-python) | `1.17.0` | `1.18.0` |\n| [langchain](https://github.com/langchain-ai/langchain) | `1.3.9` | `1.3.11` |\n| [langchain-core](https://github.com/langchain-ai/langchain) | `1.4.7` | `1.4.8` |\n| [langchain-google-genai](https://github.com/langchain-ai/langchain-google) | `4.2.5` | `4.2.6` |\n| [langgraph](https://github.com/langchain-ai/langgraph) | `1.2.5` | `1.2.7` |\n| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.8.16` | `0.9.7` |\n| [msgpack](https://github.com/msgpack/msgpack-python) | `1.2.0` | `1.2.1` |\n| [redis](https://github.com/redis/redis-py) | `8.0.0` | `8.0.1` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.18.0` | `0.19.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.63.0` | `2.64.0` |\n| [typing-extensions](https://github.com/python/typing_extensions) | `4.15.0` | `4.16.0` |\n| [tzlocal](https://github.com/regebro/tzlocal) | `5.4` | `5.4.4` |\n| [uuid-utils](https://github.com/aminalaee/uuid-utils) | `0.16.1` | `0.16.2` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.49.0` | `0.50.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.8.1` | `0.8.2` |\n| [xxhash](https://github.com/ifduyue/python-xxhash) | `3.7.0` | `3.8.0` |\n\n\nUpdates `aiohappyeyeballs` from 2.6.2 to 2.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/releases\"\u003eaiohappyeyeballs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003ePerformance Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse defaultdict to help with performance (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/239\"\u003e#239\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactoring\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eCollapse collect-then-remove pattern in utils helpers (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/227\"\u003e#227\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/0dd3fd16fe394eb8493000dc9b9894fad3ca3190\"\u003e\u003ccode\u003e0dd3fd1\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMerge identical except blocks in _connect_sock cleanup (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/229\"\u003e#229\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/b7c186e3242eb4d6eaf0918857a99c263b3186fb\"\u003e\u003ccode\u003eb7c186e\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSimplify _interleave_addrinfos family grouping (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/226\"\u003e#226\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/fdf6548a5f8b38e45ad7cee8add3c3a7e34e2805\"\u003e\u003ccode\u003efdf6548\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.7.0...v2.7.1\"\u003ev2.7.0...v2.7.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.7.0 (2026-05-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Python 3.14 support (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/pull/224\"\u003e#224\u003c/a\u003e, \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/10e7d4341666605de295dd00da716e30002e78c2\"\u003e\u003ccode\u003e10e7d43\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003e\u003cstrong\u003eDetailed Changes\u003c/strong\u003e: \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.6.2...v2.7.0\"\u003ev2.6.2...v2.7.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/blob/main/CHANGELOG.md\"\u003eaiohappyeyeballs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.7.1 (2026-07-01)\u003c/h2\u003e\n\u003ch3\u003ePerformance improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse defaultdict to help with performance (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactoring\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSimplify _interleave_addrinfos family grouping (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/fdf6548a5f8b38e45ad7cee8add3c3a7e34e2805\"\u003e\u003ccode\u003efdf6548\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCollapse collect-then-remove pattern in utils helpers (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/0dd3fd16fe394eb8493000dc9b9894fad3ca3190\"\u003e\u003ccode\u003e0dd3fd1\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMerge identical except blocks in _connect_sock cleanup (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/b7c186e3242eb4d6eaf0918857a99c263b3186fb\"\u003e\u003ccode\u003eb7c186e\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.7.0 (2026-05-20)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd python 3.14 support (\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/10e7d4341666605de295dd00da716e30002e78c2\"\u003e\u003ccode\u003e10e7d43\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/4dfc926e30eea8d24c1a71602d73c0e9a895c191\"\u003e\u003ccode\u003e4dfc926\u003c/code\u003e\u003c/a\u003e 2.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/e10f335ad9630122832e967428ac138992a50bca\"\u003e\u003ccode\u003ee10f335\u003c/code\u003e\u003c/a\u003e perf: use defaultdict to help with performance (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/239\"\u003e#239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/338277badfb25fc38759ce38ab9ea2c20ec1bfff\"\u003e\u003ccode\u003e338277b\u003c/code\u003e\u003c/a\u003e chore: stop tracking .DS_Store files (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/251\"\u003e#251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/16978694944ed7fb5e7b49a173160144ccac45bc\"\u003e\u003ccode\u003e1697869\u003c/code\u003e\u003c/a\u003e ci: add codspeed benchmark suite for addrinfo reordering hot paths (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/d40a848cd2262b435242646fa8e220300bcd6952\"\u003e\u003ccode\u003ed40a848\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump starlette from 1.0.1 to 1.3.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/242\"\u003e#242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/51d42669b2b94a78c6d4bd059e449b8ef51c6646\"\u003e\u003ccode\u003e51d4266\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump cryptography from 46.0.7 to 48.0.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/243\"\u003e#243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/2df44b3987d3c887a8493ba19259c63588226d6c\"\u003e\u003ccode\u003e2df44b3\u003c/code\u003e\u003c/a\u003e chore(pre-commit.ci): pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/241\"\u003e#241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/3e3cb615f00bfb4d29c30e0c86c897f4de8fb02d\"\u003e\u003ccode\u003e3e3cb61\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.3 to 9.1.1 (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/244\"\u003e#244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/922dcd79a66d67fdd98a5f9b7587c4f8cda44653\"\u003e\u003ccode\u003e922dcd7\u003c/code\u003e\u003c/a\u003e chore(deps-ci): bump the github-actions group with 4 updates (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/245\"\u003e#245\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/commit/70461c583a8cf3c6fa85b8c48b8e4b576cee8083\"\u003e\u003ccode\u003e70461c5\u003c/code\u003e\u003c/a\u003e ci: drop .github/FUNDING.yml to inherit org-wide config (\u003ca href=\"https://redirect.github.com/aio-libs/aiohappyeyeballs/issues/247\"\u003e#247\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/aio-libs/aiohappyeyeballs/compare/v2.6.2...v2.7.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anyio` from 4.14.0 to 4.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/149b9e907618fadf6840a4d3cebad533b0c7d033\"\u003e\u003ccode\u003e149b9e9\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/377518cd1160314f2fdf74f356ae9e848c94a065\"\u003e\u003ccode\u003e377518c\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the github-actions group (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b42a2f5e8e9910d0c57b970f9a747427a9da26f0\"\u003e\u003ccode\u003eb42a2f5\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1185\"\u003e#1185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/3ceb6ffbfa89be715f444550883356fbfbc13154\"\u003e\u003ccode\u003e3ceb6ff\u003c/code\u003e\u003c/a\u003e Allow 0 tokens in a CapacityLimiter instantiated outside an event loop (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1183\"\u003e#1183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/e10d1db74f7a59cb283a1e4b3b22227da11c6f07\"\u003e\u003ccode\u003ee10d1db\u003c/code\u003e\u003c/a\u003e Add missing await to open_file() in file I/O concurrency example (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1182\"\u003e#1182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1dbc3b62256e5877bcf610aca98ba6e450d14c20\"\u003e\u003ccode\u003e1dbc3b6\u003c/code\u003e\u003c/a\u003e OutcomeException should not discard test runner_task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.0...4.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `boto3` from 1.43.30 to 1.43.40\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/dd59a59bbd400538f20d03782991907321f3cac7\"\u003e\u003ccode\u003edd59a59\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.40'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b416ca0ee262545bc14dad610825800d0e1afdfe\"\u003e\u003ccode\u003eb416ca0\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.40\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/b228d052a91bd2a2b6af120e80877ecffd413ad0\"\u003e\u003ccode\u003eb228d05\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/121db7a5a3e37a6d76a1356bf93646616bd04c5b\"\u003e\u003ccode\u003e121db7a\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/00141f6a0d73fc19d7edb52cb054317a5c71fe43\"\u003e\u003ccode\u003e00141f6\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/310317d679150d6c78c9af133dde716a0833bf0b\"\u003e\u003ccode\u003e310317d\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/ff7c1cfdabd6fc5cc0869d521e25f6fa19a7582b\"\u003e\u003ccode\u003eff7c1cf\u003c/code\u003e\u003c/a\u003e Add changelog entries from botocore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/805c6837a36f52c0b35235bc12ed9243c91b6e9c\"\u003e\u003ccode\u003e805c683\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS to shared Python SDK and CLI team (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4809\"\u003e#4809\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/efcfb6506ce686aa8a09908d835ba2b9731209a5\"\u003e\u003ccode\u003eefcfb65\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.38'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/d7aa957044d50c107fcd2ba9049d1f3a9056c473\"\u003e\u003ccode\u003ed7aa957\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.38' into develop\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.30...1.43.40\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `botocore` from 1.43.30 to 1.43.40\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/c1894c100916579eef4df96e2b330973b9d715f0\"\u003e\u003ccode\u003ec1894c1\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.40'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/fc560a48e6d6a2342a28e32f0f59668efa347179\"\u003e\u003ccode\u003efc560a4\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.40\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/420c5848eac57be3c4dcc5c9b1f36085de397695\"\u003e\u003ccode\u003e420c584\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/e00fad7da41412453284c5db9da30283d581a8e7\"\u003e\u003ccode\u003ee00fad7\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/3f295440320638cc50db35e0f599e98555c80b7a\"\u003e\u003ccode\u003e3f29544\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/db6ca713163f4116d23573937389da352f9953b6\"\u003e\u003ccode\u003edb6ca71\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.39' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/97d313f018d34bbf38b68296352aec0bc2441745\"\u003e\u003ccode\u003e97d313f\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.39\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/bcfbd50cca39b6ed8cebf81ba3ad33eaa69bffc5\"\u003e\u003ccode\u003ebcfbd50\u003c/code\u003e\u003c/a\u003e Update endpoints model\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/0813a0feec54b2f4048dcc163363f0a231272e3b\"\u003e\u003ccode\u003e0813a0f\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/ea9157a08919bdf3daceb2176fabbe83535849f5\"\u003e\u003ccode\u003eea9157a\u003c/code\u003e\u003c/a\u003e Update CODEOWNERS to shared Python SDK and CLI team (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3740\"\u003e#3740\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.30...1.43.40\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.5.20 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.05.20...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.1 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\u003eReleased 2026-06-24\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by {pr}\u003ccode\u003e3126\u003c/code\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. {issue}\u003ccode\u003e3502\u003c/code\u003e\n{issue}\u003ccode\u003e3043\u003c/code\u003e {pr}\u003ccode\u003e3504\u003c/code\u003e {pr}\u003ccode\u003e3508\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. {pr}\u003ccode\u003e3509\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n{issue}\u003ccode\u003e3059\u003c/code\u003e {pr}\u003ccode\u003e3507\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. {issue}\u003ccode\u003e3242\u003c/code\u003e {issue}\u003ccode\u003e2542\u003c/code\u003e {pr}\u003ccode\u003e3534\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from {pr}\u003ccode\u003e3482\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e\n{pr}\u003ccode\u003e3533\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. {pr}\u003ccode\u003e3578\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. {issue}\u003ccode\u003e2331\u003c/code\u003e {issue}\u003ccode\u003e1884\u003c/code\u003e {issue}\u003ccode\u003e3125\u003c/code\u003e {pr}\u003ccode\u003e3582\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.4.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `croniter` from 6.0.0 to 6.2.3\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/croniter/blob/main/CHANGELOG.rst\"\u003ecroniter's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.2.3 (2026-07-02)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Fix quadratic expansion of comma-separated range lists for a large speed-up on expressions with many ranges. [1d79fc6, [#231](https://github.com/pallets-eco/croniter/issues/231), @alhudz]\n\u003cp\u003eBugfixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Reject a zero step (e.g. ``5-5/0``) in equal and reversed cron ranges instead of silently accepting it. [ab27767, [#232](https://github.com/pallets-eco/croniter/issues/232), @alhudz]\n- Fix ``expand_from_start_time`` month low-bound off-by-one so stepped month ranges start on the correct month. [f329964, [#235](https://github.com/pallets-eco/croniter/issues/235), @alhudz]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eFix zizmor-reported security findings in GitHub Actions workflows. [ed19f94, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e]\u003c/li\u003e\n\u003cli\u003eBump pinned build and CI dependencies via dependabot.\u003c/li\u003e\n\u003cli\u003eUpgrade locked development and build dependencies (\u003ccode\u003euv lock --upgrade\u003c/code\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.2 (2026-03-15)\u003c/h2\u003e\n\u003cp\u003ePackaging\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e- Switch build backend from ``flit_core`` to ``hatchling`` with pinned dependencies. [4cce160]\n- Add PEP 639 license expression (``license = \u0026amp;quot;MIT\u0026amp;quot;``) to project metadata. [4cce160]\n- Pin all GitHub Actions to SHA hashes across CI workflows. [4cce160]\n- Add dependabot for automated dependency updates. [4cce160]\n- Add zizmor workflow for CI security scanning. [4cce160]\n\n\n6.2.1 (2026-03-15)\n------------------\n\nBugfixes\n~~~~~~~~\n- Fix ``get_prev`` skipping Feb 29 on leap years for day-of-month expressions. [441a0b5, [#203](https://github.com/pallets-eco/croniter/issues/203), @Souls-R]\n\nPackaging\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eLicense :: OSI Approved :: MIT License\u003c/code\u003e classifier. [270cbbc, \u003ca href=\"https://github.com/cdheiser\"\u003e\u003ccode\u003e@​cdheiser\u003c/code\u003e\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e6.2.0 (2026-03-14)\u003c/h2\u003e\n\u003cp\u003eFeatures and Improvements\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eW\u003c/code\u003e (nearest weekday) in the day-of-month field. [c79d88a]\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eprecision_in_seconds\u003c/code\u003e parameter to \u003ccode\u003ematch()\u003c/code\u003e and \u003ccode\u003ematch_range()\u003c/code\u003e to allow overriding the default matching precision. [7415d1e, \u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/58\"\u003e#58\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/22b59e05f5ca485c45596b2a9b580fddffbf753f\"\u003e\u003ccode\u003e22b59e0\u003c/code\u003e\u003c/a\u003e Prepare for release 6.2.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/236\"\u003e#236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ab277671adc8e446e8dc7f1e939eabf024b6199e\"\u003e\u003ccode\u003eab27767\u003c/code\u003e\u003c/a\u003e reject zero step in equal and reversed cron ranges (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/232\"\u003e#232\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/f329964223eeb29e7788b1a9d615b525148fec96\"\u003e\u003ccode\u003ef329964\u003c/code\u003e\u003c/a\u003e fix expand_from_start_time month low bound off-by-one (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/235\"\u003e#235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/9810279c20030954e2f1ed2cf5f1d34b98c6b07f\"\u003e\u003ccode\u003e9810279\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/233\"\u003e#233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/d051aaf6342fbe9c559b9fcd99e6fb6f3bb63cb7\"\u003e\u003ccode\u003ed051aaf\u003c/code\u003e\u003c/a\u003e Bump hatchling from 1.29.0 to 1.30.1 in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/234\"\u003e#234\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/1d79fc6555fb9208e290e0af10194eec638ae01c\"\u003e\u003ccode\u003e1d79fc6\u003c/code\u003e\u003c/a\u003e fix quadratic expansion of comma-separated range lists (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/231\"\u003e#231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/ed19f94c472ef665598693a554e6a5555be41f7b\"\u003e\u003ccode\u003eed19f94\u003c/code\u003e\u003c/a\u003e Fix zizmor-reported security findings in GitHub Actions workflows (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/230\"\u003e#230\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/82657c37b873319570fee74c1864cb4d6153f543\"\u003e\u003ccode\u003e82657c3\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/229\"\u003e#229\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/8e13827f77358beabf75245ad37d31a581cb6d1e\"\u003e\u003ccode\u003e8e13827\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/228\"\u003e#228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/croniter/commit/e55d70bf2288e25c1ddf850fde703d56888772f2\"\u003e\u003ccode\u003ee55d70b\u003c/code\u003e\u003c/a\u003e Bump trove-classifiers in the pip-dependencies group across 1 directory (\u003ca href=\"https://redirect.github.com/pallets-eco/croniter/issues/225\"\u003e#225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/croniter/compare/6.0.0...6.2.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-auth` from 2.55.0 to 2.55.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-auth's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-auth: v2.55.1\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.55.0...google-auth-v2.55.1\"\u003e2.55.1\u003c/a\u003e (2026-06-25)\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e lower regional access boundary logs from warning to debug. (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17571\"\u003e#17571\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1ef418362c1a69e6bbe6f78741b53dc1f3e7b301\"\u003e1ef4183\u003c/a\u003e), closes \u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17515\"\u003e#17515\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/900d51fcc122464eb3611589f6f9a9c55a85598f\"\u003e\u003ccode\u003e900d51f\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17543\"\u003e#17543\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/1ef418362c1a69e6bbe6f78741b53dc1f3e7b301\"\u003e\u003ccode\u003e1ef4183\u003c/code\u003e\u003c/a\u003e fix(auth): lower regional access boundary logs from warning to debug. (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17571\"\u003e#17571\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/bd782cf279ae700f56d40702d4ef25ef89e2ff9b\"\u003e\u003ccode\u003ebd782cf\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-bigtable (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17575\"\u003e#17575\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/57ebaa3c244a9fa97d3e6db206126c504f4b954f\"\u003e\u003ccode\u003e57ebaa3\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-firestore (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17577\"\u003e#17577\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/140d86fe6181a4d6f831df8cdc7d86facf8ebe00\"\u003e\u003ccode\u003e140d86f\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-compute (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17576\"\u003e#17576\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/39b252f4effe7e8915efa8796d90fd29f356bf96\"\u003e\u003ccode\u003e39b252f\u003c/code\u003e\u003c/a\u003e feat: regenerate google-cloud-spanner (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17578\"\u003e#17578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/421eebdb31d526a6d5ba27c433cf2803d7619be3\"\u003e\u003ccode\u003e421eebd\u003c/code\u003e\u003c/a\u003e feat: support interactive execution of deferred DataFrames in TableWidget (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/3619b29e10ae04623d101808cb98be5edbb483b4\"\u003e\u003ccode\u003e3619b29\u003c/code\u003e\u003c/a\u003e feat: support gemini-3.x models in loader and update default model to gemini-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17bef417db646c0f9fcd91529cd06b2527ec5e3f\"\u003e\u003ccode\u003e17bef41\u003c/code\u003e\u003c/a\u003e test(bigquery-magics): make table_id parsing check version-agnostic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17562\"\u003e#17562\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/e68853162249b7a55f560f9a203d49984665c854\"\u003e\u003ccode\u003ee688531\u003c/code\u003e\u003c/a\u003e bigtable: add ValueBitmaskFilter for data client (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17567\"\u003e#17567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-auth-v2.55.0...google-auth-v2.55.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-resource-manager` from 1.17.0 to 1.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/googleapis/google-cloud-python/releases\"\u003egoogle-cloud-resource-manager's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-resource-manager: v1.18.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-resource-manager-v1.17.0...google-cloud-resource-manager-v1.18.0\"\u003e1.18.0\u003c/a\u003e (2026-06-22)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eregenerate google-cloud-[o-r] packages (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17075\"\u003e#17075\u003c/a\u003e) (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f4bd0182d808ae73c3c6981e6ce3d565f78a6051\"\u003ef4bd018\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/a5ad18cbad0577b79917dfad2242a57dc21432e1\"\u003e\u003ccode\u003ea5ad18c\u003c/code\u003e\u003c/a\u003e chore: release main (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17482\"\u003e#17482\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f6937b33e31a4c3e884165b582442274a366a995\"\u003e\u003ccode\u003ef6937b3\u003c/code\u003e\u003c/a\u003e chore(main): release google-cloud-bigtable 2.39.0 (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17497\"\u003e#17497\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/172302b809b0ff13267f18b5e7dd24be0dce2f70\"\u003e\u003ccode\u003e172302b\u003c/code\u003e\u003c/a\u003e ci(bigquery-storage): fix \u003ccode\u003ecore_deps_from_source\u003c/code\u003e and \u003ccode\u003eprerelease_deps\u003c/code\u003e by in...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/e7268785c6736c10c1337160b4d8606975062637\"\u003e\u003ccode\u003ee726878\u003c/code\u003e\u003c/a\u003e fix(bigframes): world-readable temp zip in create_cloud_function (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17522\"\u003e#17522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/2f893b1b53e7394655fd204d1f8a138212ad8227\"\u003e\u003ccode\u003e2f893b1\u003c/code\u003e\u003c/a\u003e fix: bump \u003ccode\u003e@​angular/common\u003c/code\u003e, \u003ccode\u003e@​angular/forms\u003c/code\u003e, \u003ccode\u003e@​angular/platform-browser\u003c/code\u003e and \u003ca href=\"https://github.com/ang\"\u003e\u003ccode\u003e@​ang\u003c/code\u003e\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f23063f9182cdec868c16afb80304892850fbe88\"\u003e\u003ccode\u003ef23063f\u003c/code\u003e\u003c/a\u003e fix: bump langsmith from 0.8.0 to 0.8.18 in /packages/bigframes (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17518\"\u003e#17518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/6fc45e3790c5a248dcec4b74799834c7b9219ef0\"\u003e\u003ccode\u003e6fc45e3\u003c/code\u003e\u003c/a\u003e fix: bump undici and \u003ccode\u003e@​angular/build\u003c/code\u003e in /packages/bigframes/bigframes/display/...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/36b5b7ebb01030a2d0f10d49fe4827ddc79dde9a\"\u003e\u003ccode\u003e36b5b7e\u003c/code\u003e\u003c/a\u003e fix: bump msgpack from 1.1.1 to 1.2.1 in /packages/bigframes (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17520\"\u003e#17520\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/11de93965831311445abacaec2d7baeef21f837d\"\u003e\u003ccode\u003e11de939\u003c/code\u003e\u003c/a\u003e tests: add Python 3.15 pre-release testing (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/17517\"\u003e#17517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/025840544f5d4ab6a429d1cd9bdbb256c981aa0d\"\u003e\u003ccode\u003e0258405\u003c/code\u003e\u003c/a\u003e fix(bigquery): close GAPIC storage transport and auth sessions to prevent soc...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-resource-manager-v1.17.0...google-cloud-resource-manager-v1.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain` from 1.3.9 to 1.3.11\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain==1.3.11\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.3.10\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.3.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38377\"\u003e#38377\u003c/a\u003e)\nfix(langchain,openai): only set \u003ccode\u003estrict=True\u003c/code\u003e on tools for OpenAI-compatible models in \u003ccode\u003eProviderStrategy\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38370\"\u003e#38370\u003c/a\u003e)\nchore: bump pydantic-settings from 2.12.0 to 2.14.2 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38279\"\u003e#38279\u003c/a\u003e)\nchore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38280\"\u003e#38280\u003c/a\u003e)\nchore: bump langsmith from 0.8.9 to 0.8.18 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38281\"\u003e#38281\u003c/a\u003e)\ndocs(langchain): document summarization prompt contract (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38256\"\u003e#38256\u003c/a\u003e)\u003c/p\u003e\n\u003ch2\u003elangchain==1.3.10\u003c/h2\u003e\n\u003cp\u003eChanges since langchain==1.3.9\u003c/p\u003e\n\u003cp\u003erelease(langchain): 1.3.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38255\"\u003e#38255\u003c/a\u003e)\nchore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38176\"\u003e#38176\u003c/a\u003e)\nchore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38179\"\u003e#38179\u003c/a\u003e)\nfix(langchain): switch summary format (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38171\"\u003e#38171\u003c/a\u003e)\nfix(langchain): detect provider strategy for dated \u003ccode\u003egpt-5.2\u003c/code\u003e/\u003ccode\u003egpt-5.4\u003c/code\u003e snapshots (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38222\"\u003e#38222\u003c/a\u003e)\nchore(langchain): improve typing in tests (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38163\"\u003e#38163\u003c/a\u003e)\nchore: bump pyjwt from 2.12.0 to 2.13.0 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38168\"\u003e#38168\u003c/a\u003e)\nrelease(openai): 1.3.2 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38130\"\u003e#38130\u003c/a\u003e)\nhotfix(openai): switch version (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38123\"\u003e#38123\u003c/a\u003e)\nrelease(openai): 1.4.0 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38120\"\u003e#38120\u003c/a\u003e)\ndocs: refresh \u003ccode\u003eREADME\u003c/code\u003e installation and resources (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38119\"\u003e#38119\u003c/a\u003e)\ntest(core,langchain): update tests for explicit deserialization allowlists (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38118\"\u003e#38118\u003c/a\u003e)\nrelease(core): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38111\"\u003e#38111\u003c/a\u003e)\nrelease(anthropic): 1.4.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38105\"\u003e#38105\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/83e824922ac9bf3bf882347fecabd09614bccc37\"\u003e\u003ccode\u003e83e8249\u003c/code\u003e\u003c/a\u003e release(langchain): 1.3.11 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38377\"\u003e#38377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/6dd45c90f6c7e17dc9f1cd0c17035375fe655b1f\"\u003e\u003ccode\u003e6dd45c9\u003c/code\u003e\u003c/a\u003e hotfix(anthropic): regenerate cassette (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38376\"\u003e#38376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/4a837567c894363a729bae39a1b2bbe68cb89c41\"\u003e\u003ccode\u003e4a83756\u003c/code\u003e\u003c/a\u003e release(openai): 1.3.3 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38375\"\u003e#38375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/792c1a743e4471990e96e818957b3299517e7255\"\u003e\u003ccode\u003e792c1a7\u003c/code\u003e\u003c/a\u003e fix(openai): drop response item ids when \u003ccode\u003estore\u003c/code\u003e is false (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38372\"\u003e#38372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9f7e46fd7052960a402a059b2f78ec6248f78527\"\u003e\u003ccode\u003e9f7e46f\u003c/code\u003e\u003c/a\u003e release(anthropic): 1.4.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38373\"\u003e#38373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/9ef324c9abb534b4839bd2a42f4fb36b1ec3f3c3\"\u003e\u003ccode\u003e9ef324c\u003c/code\u003e\u003c/a\u003e fix(langchain,openai): only set \u003ccode\u003estrict=True\u003c/code\u003e on tools for OpenAI-compatible ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/05b5af17dca9a554b40e216554f5020ff05eb378\"\u003e\u003ccode\u003e05b5af1\u003c/code\u003e\u003c/a\u003e chore(infra): update workflow key name (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38367\"\u003e#38367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8e8177487003026f25198068a137270fe369f2d4\"\u003e\u003ccode\u003e8e81774\u003c/code\u003e\u003c/a\u003e test(groq): xfail flaky tool choice test (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38365\"\u003e#38365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/946fbbbead849fc948e50ef726242c47013a43b7\"\u003e\u003ccode\u003e946fbbb\u003c/code\u003e\u003c/a\u003e fix(groq): replace deprecated Groq llama models (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38363\"\u003e#38363\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/d11b1fc86369b970a8e6144fdcc4f5923f6e03cd\"\u003e\u003ccode\u003ed11b1fc\u003c/code\u003e\u003c/a\u003e chore(model-profiles): refresh model profile data (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38341\"\u003e#38341\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain==1.3.9...langchain==1.3.11\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-core` from 1.4.7 to 1.4.8\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain/releases\"\u003elangchain-core's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-core==1.4.8\u003c/h2\u003e\n\u003cp\u003eChanges since langchain-core==1.4.7\u003c/p\u003e\n\u003cp\u003echore: bump jupyter-server from 2.18.0 to 2.20.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38252\"\u003e#38252\u003c/a\u003e)\nchore: bump tornado from 6.5.6 to 6.5.7 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38184\"\u003e#38184\u003c/a\u003e)\nchore: bump bleach from 6.3.0 to 6.4.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38198\"\u003e#38198\u003c/a\u003e)\nrelease(core): 1.4.8 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38254\"\u003e#38254\u003c/a\u003e)\nrefactor(langchain-classic): remove code for Python \u0026lt; 3.10 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38194\"\u003e#38194\u003c/a\u003e)\nperf(core): memoize \u003ccode\u003eBaseTool.tool_call_schema\u003c/code\u003e subset model and cache \u003ccode\u003emodel_json_schema\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38073\"\u003e#38073\u003c/a\u003e)\nstyle(core): fix style in \u003ccode\u003elangchain_core\u003c/code\u003e/\u003ccode\u003e_security\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38189\"\u003e#38189\u003c/a\u003e)\nfix(core): preserve usage token details in v3 streaming events (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38021\"\u003e#38021\u003c/a\u003e)\nfix(core): \u003ccode\u003edisallow_any_generics\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38156\"\u003e#38156\u003c/a\u003e)\nchore(core): add mypy \u003ccode\u003ewarn_unreachable\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38109\"\u003e#38109\u003c/a\u003e)\ndocs: refresh \u003ccode\u003eREADME\u003c/code\u003e installation and resources (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38119\"\u003e#38119\u003c/a\u003e)\ntest(core,langchain): update tests for explicit deserialization allowlists (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38118\"\u003e#38118\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/15b0a4930b5306bb2174f16d92fe4b7837147d0a\"\u003e\u003ccode\u003e15b0a49\u003c/code\u003e\u003c/a\u003e chore: bump jupyter-server from 2.18.0 to 2.20.0 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38252\"\u003e#38252\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/612139f3af5f55b6311695fe6b139f0b6a6f68a2\"\u003e\u003ccode\u003e612139f\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38175\"\u003e#38175\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/921e370a67af4254b948de94c4db4587f4716a84\"\u003e\u003ccode\u003e921e370\u003c/code\u003e\u003c/a\u003e chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38176\"\u003e#38176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/1aabc26836e0c1220121a1f37e3a2691e20f2f19\"\u003e\u003ccode\u003e1aabc26\u003c/code\u003e\u003c/a\u003e chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain_v1 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38179\"\u003e#38179\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/8d51355f1f81825b72cb55303a39825ecbdc6b44\"\u003e\u003ccode\u003e8d51355\u003c/code\u003e\u003c/a\u003e chore: bump aiohttp from 3.14.0 to 3.14.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38180\"\u003e#38180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/0b1b7bb77a7e8cf98071e088da777ff52558f771\"\u003e\u003ccode\u003e0b1b7bb\u003c/code\u003e\u003c/a\u003e chore: bump cryptography from 46.0.7 to 48.0.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38181\"\u003e#38181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/dfd062742271ad693c8bebe4ff1784cc4f408ade\"\u003e\u003ccode\u003edfd0627\u003c/code\u003e\u003c/a\u003e chore: bump starlette from 1.0.1 to 1.3.1 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38182\"\u003e#38182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/0269392514c41e44bfa0413c3f550c06e46d2e1e\"\u003e\u003ccode\u003e0269392\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/langchain (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38183\"\u003e#38183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/24d0b3791af52796b3fe5330f38e99b89afda4b1\"\u003e\u003ccode\u003e24d0b37\u003c/code\u003e\u003c/a\u003e chore: bump tornado from 6.5.6 to 6.5.7 in /libs/core (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38184\"\u003e#38184\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain/commit/f368854ec388f0a8e98b9e77aa8da83ebad1b978\"\u003e\u003ccode\u003ef368854\u003c/code\u003e\u003c/a\u003e chore: bump bleach from 6.2.0 to 6.4.0 in /libs/text-splitters (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain/issues/38195\"\u003e#38195\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain/compare/langchain-core==1.4.7...langchain-core==1.4.8\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langchain-google-genai` from 4.2.5 to 4.2.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langchain-google/releases\"\u003elangchain-google-genai's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elangchain-google-genai==4.2.6\u003c/h2\u003e\n\u003cp\u003eChanges since libs/genai/v4.2.5\u003c/p\u003e\n\u003cp\u003erelease(genai): 4.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1871\"\u003e#1871\u003c/a\u003e)\nfix(genai): propagate generation config fields (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1870\"\u003e#1870\u003c/a\u003e)\nfix(genai): support constructor thinking config (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1869\"\u003e#1869\u003c/a\u003e)\nchore: bump langsmith from 0.8.0 to 0.8.18 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1860\"\u003e#1860\u003c/a\u003e)\ntest(genai,vertexai,community): refresh Gemini model references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1856\"\u003e#1856\u003c/a\u003e)\nchore: bump types-google-cloud-ndb from 2.4.0.20260402 to 2.4.0.20260518 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1778\"\u003e#1778\u003c/a\u003e)\nchore: bump cryptography from 46.0.7 to 48.0.1 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1851\"\u003e#1851\u003c/a\u003e)\nchore: bump the major group across 1 directory with 3 updates (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1810\"\u003e#1810\u003c/a\u003e)\nfeat(genai,vertexai): add package version metadata (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1841\"\u003e#1841\u003c/a\u003e)\nfix(genai): stop docstring cross-refs resolving to wrong class (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1839\"\u003e#1839\u003c/a\u003e)\nchore(genai,vertexai): bump min version of \u003ccode\u003elangchain-core\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1835\"\u003e#1835\u003c/a\u003e)\ntest(genai): make tool-calling integration tests deterministic (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1833\"\u003e#1833\u003c/a\u003e)\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/29780eac5b87e436f38ff11222b4ca37853fbacd\"\u003e\u003ccode\u003e29780ea\u003c/code\u003e\u003c/a\u003e release(genai): 4.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1871\"\u003e#1871\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/d2fb18c811f82cd86fc6b570e7b2b9ee67671ce8\"\u003e\u003ccode\u003ed2fb18c\u003c/code\u003e\u003c/a\u003e fix(genai): propagate generation config fields (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1870\"\u003e#1870\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/3086854c8e88dfc9f7d60d7dfabb9c8a7bc82297\"\u003e\u003ccode\u003e3086854\u003c/code\u003e\u003c/a\u003e fix(genai): support constructor thinking config (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1869\"\u003e#1869\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/32b18c6273749b7c9ece2c49b0ee13c13c659948\"\u003e\u003ccode\u003e32b18c6\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1858\"\u003e#1858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/f7d45305b825d08b72a9c42d9914d2fb53af1269\"\u003e\u003ccode\u003ef7d4530\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/genai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1860\"\u003e#1860\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/985efce66c0080da9ce6ae37d4c130873f301158\"\u003e\u003ccode\u003e985efce\u003c/code\u003e\u003c/a\u003e chore: bump langsmith from 0.8.0 to 0.8.18 in /libs/community (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1859\"\u003e#1859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/eeb409fa0bd0ed86f0c885a7a9eae368c77af5d9\"\u003e\u003ccode\u003eeeb409f\u003c/code\u003e\u003c/a\u003e chore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/vertexai (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1861\"\u003e#1861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/146a0168e5b75d62eb53db63262a18434b3fbc56\"\u003e\u003ccode\u003e146a016\u003c/code\u003e\u003c/a\u003e fix(vertexai): route labels to request envelope instead of \u003ccode\u003eGenerationConfig\u003c/code\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/bab2961434f405ab9efe64bdcc9065c85f95016f\"\u003e\u003ccode\u003ebab2961\u003c/code\u003e\u003c/a\u003e fix(vertexai): replace removed bison integration test models (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1863\"\u003e#1863\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langchain-google/commit/643f77297ad0d913bcc586d9c09c1a51f2c7805d\"\u003e\u003ccode\u003e643f772\u003c/code\u003e\u003c/a\u003e test(genai,vertexai,community): refresh Gemini model references (\u003ca href=\"https://redirect.github.com/langchain-ai/langchain-google/issues/1856\"\u003e#1856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langchain-google/compare/libs/genai/v4.2.5...libs/genai/v4.2.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langgraph` from 1.2.5 to 1.2.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langgraph/releases\"\u003elanggraph's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003elanggraph==1.2.7\u003c/h2\u003e\n\u003cp\u003eChanges since 1.2.6\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003erelease(langgraph): 1.2.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8223\"\u003e#8223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): snapshot \u003ccode\u003eDeltaChannel\u003c/code\u003e overwrite supersteps (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8125\"\u003e#8125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): Make \u003ccode\u003eOverwrite\u003c/code\u003e survive JSON roundtrips (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8127\"\u003e#8127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump redis in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7976\"\u003e#7976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8176\"\u003e#8176\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump jupyterlab from 4.5.7 to 4.5.9 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8164\"\u003e#8164\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(langgraph): emit valid UUIDs for exit-mode delta task_ids for langgraph-api (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8165\"\u003e#8165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump bleach from 6.3.0 to 6.4.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8107\"\u003e#8107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump cryptography from 46.0.7 to 48.0.1 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8106\"\u003e#8106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump jupyter-server from 2.18.0 to 2.20.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8134\"\u003e#8134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump tornado from 6.5.6 to 6.5.7 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8108\"\u003e#8108\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump pyjwt from 2.12.0 to 2.13.0 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8092\"\u003e#8092\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003elanggraph==1.2.6\u003c/h2\u003e\n\u003cp\u003eChanges since 1.2.5\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003erelease(langgraph): 1.2.6 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8139\"\u003e#8139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: nested subgraph inherits parent checkpoint_ns (regression in 1.2.3) (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8053\"\u003e#8053\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: cancel running subgraphs on v3 stream abort [closes \u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8029\"\u003e#8029\u003c/a\u003e] (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8057\"\u003e#8057\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003erelease(cli): 0.4.30 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8101\"\u003e#8101\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: standardize package \u003ccode\u003eREADME.md\u003c/code\u003e structure (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8064\"\u003e#8064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003echore(deps): bump tornado from 6.5.5 to 6.5.6 in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8063\"\u003e#8063\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/5931a5f0b313feff24e2516a586c55601b868ac1\"\u003e\u003ccode\u003e5931a5f\u003c/code\u003e\u003c/a\u003e release(langgraph): 1.2.7 (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8223\"\u003e#8223\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/9a27693c64d3a0d6847dfe1c3d57e301cbf15bbf\"\u003e\u003ccode\u003e9a27693\u003c/code\u003e\u003c/a\u003e fix(langgraph): snapshot \u003ccode\u003eDeltaChannel\u003c/code\u003e overwrite supersteps (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8125\"\u003e#8125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/1b5ca0a1b1e1889879e43536fc5efd0739a3c479\"\u003e\u003ccode\u003e1b5ca0a\u003c/code\u003e\u003c/a\u003e fix(langgraph): Make \u003ccode\u003eOverwrite\u003c/code\u003e survive JSON roundtrips (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8127\"\u003e#8127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/d2f97191abc457954dff23ee1d9342516128ec01\"\u003e\u003ccode\u003ed2f9719\u003c/code\u003e\u003c/a\u003e chore(deps): bump redis in /libs/langgraph (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/7976\"\u003e#7976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/c1aad8b46053303c34151e4d05bad1ac0fd17ef5\"\u003e\u003ccode\u003ec1aad8b\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump starlette from 1.0.1 to 1.3.1 in /libs/sdk-py (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8104\"\u003e#8104\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/d5dfeaf033227776efdd21e91e5dd200125d623a\"\u003e\u003ccode\u003ed5dfeaf\u003c/code\u003e\u003c/a\u003e chore(deps): bump starlette from 1.0.1 to 1.3.1 in /libs/cli (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8105\"\u003e#8105\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/bdb323efbbecdf9e417f8928471db4d9877bf332\"\u003e\u003ccode\u003ebdb323e\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/checkpoint-sqlite (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/31f69551b7b7f4c30b5ff7f5849e681a6c023be2\"\u003e\u003ccode\u003e31f6955\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/checkpoint-postgres...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/6b767dea5f61acb08a2f0248510201d35991c647\"\u003e\u003ccode\u003e6b767de\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.2 to 0.8.18 in /libs/checkpoint-conforma...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/langchain-ai/langgraph/commit/e6574a854fcb60bb47e9f2ee463e01662a6d1a91\"\u003e\u003ccode\u003ee6574a8\u003c/code\u003e\u003c/a\u003e chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/cli (\u003ca href=\"https://redirect.github.com/langchain-ai/langgraph/issues/8172\"\u003e#8172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/langchain-ai/langgraph/compare/1.2.5...1.2.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `langsmith` from 0.8.16 to 0.9.7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/langchain-ai/langsmith-sdk/releases\"\u003elangsmith's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.9.7\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(integrations): add Google ADK Live voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3115\"\u003elangchain-ai/langsmith-sdk#3115\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): attribute voice traces via ls_integration metadata by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3144\"\u003elangchain-ai/langsmith-sdk#3144\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): set ls_provider/ls_model_name on voice llm runs for cost by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3145\"\u003elangchain-ai/langsmith-sdk#3145\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(release): bump version to 0.9.7 by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3153\"\u003elangchain-ai/langsmith-sdk#3153\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.6...v0.9.7\"\u003ehttps://github.com/langchain-ai/langsmith-sdk/compare/v0.9.6...v0.9.7\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev0.9.6\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(integrations): add Pipecat voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3112\"\u003elangchain-ai/langsmith-sdk#3112\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): add LiveKit voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3113\"\u003elangchain-ai/langsmith-sdk#3113\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(integrations): add OpenAI Realtime voice tracing integration by \u003ca href=\"https://github.com/carolinedivittorio\"\u003e\u003ccode\u003e@​carolinedivittorio\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3114\"\u003elangchain-ai/langsmith-sdk#3114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat(js,python): Adds thread_id to metadata for Claude Agent SDK by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3141\"\u003elangchain-ai/langsmith-sdk#3141\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(py): serialize tuple-keyed trace dictionaries by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3116\"\u003elangchain-ai/langsmith-sdk#3116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(py): guard OTEL span cleanup [closes \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3080\"\u003e#3080\u003c/a\u003e] by \u003ca href=\"https://github.com/jacoblee93\"\u003e\u003ccode\u003e@​jacoblee93\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3118\"\u003elangchain-ai/langsmith-sdk#3118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the npm_and_yarn group across 3 directories with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3123\"\u003elangchain-ai/langsmith-sdk#3123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump pnpm/action-setup from 6.0.8 to 6.0.9 in the actions-minor-and-patch group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3131\"\u003elangchain-ai/langsmith-sdk#3131\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the actions-major group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3133\"\u003elangchain-ai/langsmith-sdk#3133\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump the js-minor-and-patch group in /js with 14 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3132\"\u003elangchain-ai/langsmith-sdk#3132\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the py-major group across 1 directory with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3138\"\u003elangchain-ai/langsmith-sdk#3138\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the py-minor-and-patch group across 1 directory with 21 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3140\"\u003elangchain-ai/langsmith-sdk#3140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump the npm_and_yarn group across 4 directories with 1 update by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3148\"\u003elangchain-ai/langsmith-sdk#3148\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): update pydata-sphinx-theme requirement from \u0026gt;=0.18.0 to \u0026gt;=0.19.0 in /python by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3137\"\u003elangchain-ai/langsmith-sdk#3137\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump the js-major group across 1 directory with 7 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3134\"\u003e...\n\n_Description has been truncated_","html_url":"https://github.com/SMSLYCLOUD/smsly-hosting/pull/220","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/SMSLYCLOUD%2Fsmsly-hosting/issues/220","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/220/packages"}},{"old_version":"2025.1.31","new_version":"2026.6.17","update_type":"major","path":null,"pr_created_at":"2026-07-01T10:37:01.000Z","version_change":"2025.1.31 → 2026.6.17","issue":{"uuid":"4784733916","node_id":"PR_kwDOQ4NGtc7soRxm","number":155,"state":"open","title":"chore(deps): bump certifi from 2025.1.31 to 2026.6.17","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-01T10:37:01.000Z","updated_at":"2026-07-01T10:37:02.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"certifi","old_version":"2025.1.31","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"}],"path":null,"ecosystem":"pip"},"body":"Bumps [certifi](https://github.com/certifi/python-certifi) from 2025.1.31 to 2026.6.17.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2025.01.31...2026.06.17\"\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=certifi\u0026package-manager=pip\u0026previous-version=2025.1.31\u0026new-version=2026.6.17)](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/CSCfi/allas-web-interface/pull/155","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/CSCfi%2Fallas-web-interface/issues/155","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/155/packages"}},{"old_version":"2026.4.22","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-07-01T01:12:18.000Z","version_change":"2026.4.22 → 2026.6.17","issue":{"uuid":"4781533945","node_id":"PR_kwDOSZ_5Cs7sd3GP","number":12,"state":"open","title":"deps(backend): bump the backend-minor-and-patch group across 1 directory with 21 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-01T01:12:18.000Z","updated_at":"2026-07-01T01:12:19.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"backend-minor-and-patch","update_count":21,"packages":[{"name":"alembic","old_version":"1.18.4","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"anyio","old_version":"4.13.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.138.2","repository_url":"https://github.com/fastapi/fastapi"},{"name":"greenlet","old_version":"3.5.0","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.13","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jiter","old_version":"0.14.0","new_version":"0.16.0","repository_url":"https://github.com/pydantic/jiter"},{"name":"numpy","old_version":"2.4.4","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"openai","old_version":"2.33.0","new_version":"2.44.0","repository_url":"https://github.com/openai/openai-python"},{"name":"pydantic","old_version":"2.13.3","new_version":"2.13.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.14.0","new_version":"2.14.2","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pymupdf","old_version":"1.27.2.3","new_version":"1.28.0","repository_url":"https://github.com/pymupdf/pymupdf"},{"name":"tiktoken","old_version":"0.12.0","new_version":"0.13.0","repository_url":"https://github.com/openai/tiktoken"},{"name":"pydantic-core","old_version":"2.46.3","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"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.49","new_version":"2.0.51","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"starlette","old_version":"1.0.0","new_version":"1.3.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"},{"name":"uvicorn","old_version":"0.46.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"slowapi","old_version":"0.1.9","new_version":"0.1.10","repository_url":"https://github.com/laurents/slowapi"}],"path":null,"ecosystem":"pip"},"body":"Bumps the backend-minor-and-patch group with 21 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.18.4` | `1.18.5` |\n| [anyio](https://github.com/agronholm/anyio) | `4.13.0` | `4.14.1` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.6.17` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.2` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.138.2` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.0` | `3.5.3` |\n| [idna](https://github.com/kjd/idna) | `3.13` | `3.18` |\n| [jiter](https://github.com/pydantic/jiter) | `0.14.0` | `0.16.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.4` | `2.4.6` |\n| [openai](https://github.com/openai/openai-python) | `2.33.0` | `2.44.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.3` | `2.13.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.0` | `2.14.2` |\n| [pymupdf](https://github.com/pymupdf/pymupdf) | `1.27.2.3` | `1.28.0` |\n| [tiktoken](https://github.com/openai/tiktoken) | `0.12.0` | `0.13.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.3` | `2.47.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.49` | `2.0.51` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.0` | `1.3.1` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.46.0` | `0.49.0` |\n| [slowapi](https://github.com/laurents/slowapi) | `0.1.9` | `0.1.10` |\n\n\nUpdates `alembic` from 1.18.4 to 1.18.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.5\u003c/h1\u003e\n\u003cp\u003eReleased: June 25, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [commands]\u003c/strong\u003e Added \u003ccode\u003e--splice\u003c/code\u003e support to the \u003ccode\u003emerge()\u003c/code\u003e command. Previously, the\nmerge command would suggest using \u003ccode\u003e--splice\u003c/code\u003e when attempting to merge\nnon-head revisions, but the flag was not actually accepted by the command.\nThe \u003ccode\u003esplice\u003c/code\u003e parameter is now available in both the command-line\ninterface and the \u003ccode\u003ecommand.merge()\u003c/code\u003e function, matching the existing\nsupport in \u003ccode\u003ecommand.revision()\u003c/code\u003e.  Pull request courtesy Kadir Can\nOzden.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1712\"\u003e#1712\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [environment]\u003c/strong\u003e Added \u003ccode\u003eScriptDirectory.get_heads.consider_depends_on\u003c/code\u003e\nparameter to \u003ccode\u003eScriptDirectory.get_heads()\u003c/code\u003e. When set to \u003ccode\u003eTrue\u003c/code\u003e,\nhead revisions that are also a dependency of another revision via\n\u003ccode\u003edepends_on\u003c/code\u003e are excluded from the result, matching the effective\nheads that would be present in the \u003ccode\u003ealembic_version\u003c/code\u003e table after\nrunning all upgrades.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1806\"\u003e#1806\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed rendering of dialect keyword arguments containing\n\u003ccode\u003e~sqlalchemy.schema.Column\u003c/code\u003e objects within sequences, such as\n\u003ccode\u003epostgresql_include\u003c/code\u003e.  These were previously rendered using \u003ccode\u003erepr()\u003c/code\u003e,\nproducing invalid Python in the generated migration scripts.  Column\nobjects within list or tuple values are now correctly rendered as their\nstring column names.  Pull request courtesy Ajay Singh.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1258\"\u003e#1258\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [mysql]\u003c/strong\u003e Implemented type comparison for \u003ccode\u003eENUM\u003c/code\u003e datatypes on MySQL, which\nchecks that the individual enum values are equivalent.  If additional\nentries are on either side, this generates a diff.  Changes of order do not\ngenerate a diff.  Pull request courtesy Furkan Köykıran.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1745\"\u003e#1745\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/779\"\u003e#779\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Fixed bug where the \u003ccode\u003einline_references\u003c/code\u003e parameter of\n\u003ccode\u003eOperations.add_column()\u003c/code\u003e did not include foreign key referential\nactions such as \u003ccode\u003eON DELETE\u003c/code\u003e, \u003ccode\u003eON UPDATE\u003c/code\u003e, \u003ccode\u003eDEFERRABLE\u003c/code\u003e,\n\u003ccode\u003eINITIALLY\u003c/code\u003e, and \u003ccode\u003eMATCH\u003c/code\u003e when rendering the inline \u003ccode\u003eREFERENCES\u003c/code\u003e\nclause.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `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 `certifi` from 2026.4.22 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `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\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\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\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 `fastapi` from 0.136.1 to 0.138.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.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/702fea83bb3ef0b558104835d7936af49650fb2d\"\u003e\u003ccode\u003e702fea8\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.138.2 (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15864\"\u003e#15864\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/6466865eec63cb545869d80e2ee6fbc54c4d364e\"\u003e\u003ccode\u003e6466865\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/b790e14cb686506df663959ac4879053cfed38db\"\u003e\u003ccode\u003eb790e14\u003c/code\u003e\u003c/a\u003e ♻️ Make \u003ccode\u003eapp.frontend()\u003c/code\u003e return 404 for methods other than \u003ccode\u003eGET\u003c/code\u003e or \u003ccode\u003eHEAD\u003c/code\u003e wi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c2708d981729c96437dcc1d7cfa40cd15128bc60\"\u003e\u003ccode\u003ec2708d9\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/403b1fa16f9519f4b5ab52413daae059479fae4a\"\u003e\u003ccode\u003e403b1fa\u003c/code\u003e\u003c/a\u003e 🔧 Update sponsors: remove Stainless (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15862\"\u003e#15862\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/1929ac23195136e8616ed1b7c3fd84c65b26d234\"\u003e\u003ccode\u003e1929ac2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cba41585675ecb0e119d3ca258821659f07ec3f7\"\u003e\u003ccode\u003ecba4158\u003c/code\u003e\u003c/a\u003e ♻️ Refactor how sponsors data is handled for banners (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15852\"\u003e#15852\u003c/a\u003e)\u003c/li\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.138.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.5.0 to 3.5.3\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.3 (2026-06-26)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix a crash on free-threaded builds when multiple greenlets were\nholding a critical section on an object and the GIL for the thread\nwas dropped. See \u003ccode\u003eissue 513 \u0026lt;https://github.com/python-greenlet/greenlet/issues/513\u0026gt;\u003c/code\u003e_. Thanks\nto ddorian.\u003c/li\u003e\n\u003c/ul\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\u003c/blockquote\u003e\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/6ee8c2c5b92fbf296c10219030d0bd3ab0ea6300\"\u003e\u003ccode\u003e6ee8c2c\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6ec0bbba46fdcbfbf5fe4a37ab744aa3835f05c6\"\u003e\u003ccode\u003e6ec0bbb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/514\"\u003e#514\u003c/a\u003e from python-greenlet/issue513-preserve-crit-section\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c03a7e6932c3b437bdf873acfc66fbaae31f1875\"\u003e\u003ccode\u003ec03a7e6\u003c/code\u003e\u003c/a\u003e Py3.13+: Preserve thread state critical_section to prevent crash on free-thre...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/bc10829b9eb05d35bc0b8a09c8c6e4d54cfccc18\"\u003e\u003ccode\u003ebc10829\u003c/code\u003e\u003c/a\u003e Speed up manylinux test runs by only running the core checks; only start many...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c2db75dca4bafa562ace9553b6e5c17af6b483e4\"\u003e\u003ccode\u003ec2db75d\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.3\u003c/li\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.5.0...3.5.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.13 to 3.18\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.18 (2026-06-02)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen decoding a domain, add a \u003ccode\u003edisplay\u003c/code\u003e argument that will pass\nthrough invalid labels rather than raising an exception.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.17 (2026-05-28)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSubstantial 75% reduction in memory usage through new data\nstructures and some optimization in processing speed.\u003c/li\u003e\n\u003cli\u003eAdded a general 1024-character input length cap to the public\nvalidation, conversion, and codec entry points. This is well above\nany legitimate domain or label and guards against pathological\ninputs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.16 (2026-05-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a command-line interface (\u003ccode\u003epython -m idna\u003c/code\u003e, also available as\nthe \u003ccode\u003eidna\u003c/code\u003e script). Encodes or decodes one or more domains supplied\nas arguments or on standard input, with options to select A-label\nor U-label output and control error handling.\u003c/li\u003e\n\u003cli\u003eRaise the minimum supported Python version to 3.9\u003c/li\u003e\n\u003cli\u003eVarious code quality improvements\u003c/li\u003e\n\u003c/ul\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\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/f39ea903ba49eb5a0b2c6723c9a929b41ed4a0f1\"\u003e\u003ccode\u003ef39ea90\u003c/code\u003e\u003c/a\u003e Release 3.18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/40f4e407bc7452da37c24b0c112dcda9a5b299ba\"\u003e\u003ccode\u003e40f4e40\u003c/code\u003e\u003c/a\u003e Pre-release 3.18rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1a5bf80f2fa40454589e6144efe5f72015ef9d24\"\u003e\u003ccode\u003e1a5bf80\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/253\"\u003e#253\u003c/a\u003e from kjd/lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5bbb26fc86e28c4ee1434ae8ae8db76de4c2a5ac\"\u003e\u003ccode\u003e5bbb26f\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c532bae5270489cef8faf9f6b1eb70cbcb454c6d\"\u003e\u003ccode\u003ec532bae\u003c/code\u003e\u003c/a\u003e Rename decode() lenient= option to display= (issue \u003ca href=\"https://redirect.github.com/kjd/idna/issues/248\"\u003e#248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0b1758ba11952a2e88fd6141ffa620409bff0580\"\u003e\u003ccode\u003e0b1758b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/252\"\u003e#252\u003c/a\u003e from kjd/release-3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f48619c4cea6859b938d560fdd9feb898e678567\"\u003e\u003ccode\u003ef48619c\u003c/code\u003e\u003c/a\u003e Release 3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7421ba8003227f816142ab40178e3a7d204e6847\"\u003e\u003ccode\u003e7421ba8\u003c/code\u003e\u003c/a\u003e Pre-release 3.17rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/22ebb73b164081f209449b50162eb7ce086e96a4\"\u003e\u003ccode\u003e22ebb73\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/251\"\u003e#251\u003c/a\u003e from kjd/structure-optimizations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2a7ac0a58c788d50112a5003af545a83807fb108\"\u003e\u003ccode\u003e2a7ac0a\u003c/code\u003e\u003c/a\u003e Drop redundant parallel-arrays comment from uts46data\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.13...v3.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jiter` from 0.14.0 to 0.16.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/785cf750016150bda7410e95525bd6ed398102c4\"\u003e\u003ccode\u003e785cf75\u003c/code\u003e\u003c/a\u003e release: 0.16.0 (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/259\"\u003e#259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/e192631a659bcf251402950b78c5d17a17a9d827\"\u003e\u003ccode\u003ee192631\u003c/code\u003e\u003c/a\u003e Add 'Part of the Pydantic Stack' footer to README (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/258\"\u003e#258\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/c929d0cb4c9f59f9b89d1a0585203924f7a87f3b\"\u003e\u003ccode\u003ec929d0c\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003eserde\u003c/code\u003e Deserializer implementation (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/253\"\u003e#253\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/6d57715e01ec78859c62fc5447073c0b5902de39\"\u003e\u003ccode\u003e6d57715\u003c/code\u003e\u003c/a\u003e Modernize Emscripten CI (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/257\"\u003e#257\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/a3a02cdb056233eb89be77e6c5a11044f07b4d20\"\u003e\u003ccode\u003ea3a02cd\u003c/code\u003e\u003c/a\u003e Bump maturin to v1.14.0 (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/256\"\u003e#256\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/2fe4246c71c003ddb32c943e3b432925f05f7d3c\"\u003e\u003ccode\u003e2fe4246\u003c/code\u003e\u003c/a\u003e update to PyO3 0.29 (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/1429532d486088de53293b57ad315a501e981e9a\"\u003e\u003ccode\u003e1429532\u003c/code\u003e\u003c/a\u003e Drop support for 3.13t target (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/0bb22aa6b3a4d729e6c7bae74c05a5d0f1f654b0\"\u003e\u003ccode\u003e0bb22aa\u003c/code\u003e\u003c/a\u003e release: 0.15.0 (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/251\"\u003e#251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/jiter/commit/0f3e5eb48a5fff16d825f9af2ea7c6748bbdfbb8\"\u003e\u003ccode\u003e0f3e5eb\u003c/code\u003e\u003c/a\u003e expose \u003ccode\u003eknown_number_bytes\u003c/code\u003e and parser methods for bytes -\u0026gt; number (\u003ca href=\"https://redirect.github.com/pydantic/jiter/issues/250\"\u003e#250\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/jiter/compare/v0.14.0...v0.16.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.4.4 to 2.4.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numpy/numpy/releases\"\u003enumpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.4.6 (May 18, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.4.6 Release Notes\u003c/h1\u003e\n\u003cp\u003eNumPy 2.4.6 is a quick release that fixes a regression discovered in the 2.4.5\nrelease.\u003c/p\u003e\n\u003cp\u003eThis release supports Python versions 3.11-3.14\u003c/p\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eA total of 4 people contributed to this release. People with a \u0026quot;+\u0026quot; by their\nnames contributed a patch for the first time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e!EarlMilktea\u003c/li\u003e\n\u003cli\u003eCharles Harris\u003c/li\u003e\n\u003cli\u003eSebastian Berg\u003c/li\u003e\n\u003cli\u003eWarren Weckesser\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePull requests merged\u003c/h2\u003e\n\u003cp\u003eA total of 4 pull requests were merged for this release.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/31444\"\u003e#31444\u003c/a\u003e: MAINT: Prepare 2.4.x for further development\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/31453\"\u003e#31453\u003c/a\u003e: BUG: Fix regression in \u003ccode\u003earr.conj()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/31459\"\u003e#31459\u003c/a\u003e: BUG: \u003ccode\u003enp.linalg.svd(..., hermitian=True)\u003c/code\u003e returns non-unitary...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/numpy/numpy/pull/31460\"\u003e#31460\u003c/a\u003e: BUG: Don't call INCREF/DECREF on descr in NpyStringAcquireAllocator...\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.4.5 (May 15, 2026)\u003c/h2\u003e\n\u003ch1\u003eNumPy 2.4.5 Release Notes\u003c/h1\u003e\n\u003cp\u003eNumPy 2.4.5 is a patch release that fixes bugs discovered after the 2.4.4\nrelease, has some typing improvements, and maintains infrastructure.\u003c/p\u003e\n\u003cp\u003eThis release supports Python versions 3.11-3.14\u003c/p\u003e\n\u003ch2\u003eContributors\u003c/h2\u003e\n\u003cp\u003eA total of 17 people contributed to this release. People with a \u0026quot;+\u0026quot; by their\nnames contributed a patch for the first time.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAleksei Nikiforov\u003c/li\u003e\n\u003cli\u003eAnarion Zuo +\u003c/li\u003e\n\u003cli\u003eAnkit Ahlawat\u003c/li\u003e\n\u003cli\u003eBreno Favaretto +\u003c/li\u003e\n\u003cli\u003eCharles Harris\u003c/li\u003e\n\u003cli\u003eIgor Krivenko +\u003c/li\u003e\n\u003cli\u003eIjtihed Kilani +\u003c/li\u003e\n\u003cli\u003eJoren Hammudoglu\u003c/li\u003e\n\u003cli\u003eMaarten Baert +\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/b832a09cf2a169c833dd2371e7c07aa00b293242\"\u003e\u003ccode\u003eb832a09\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31462\"\u003e#31462\u003c/a\u003e from charris/prepare-2.4.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/57cc147d2ceacffc6534642bfbdebb3a80428e1e\"\u003e\u003ccode\u003e57cc147\u003c/code\u003e\u003c/a\u003e REL: Prepare for the NumPy 2.4.6 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/0c72b0b53b6b83c004e434b2c7855e73c000d21e\"\u003e\u003ccode\u003e0c72b0b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31459\"\u003e#31459\u003c/a\u003e from charris/backport-31347\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/9778d26e0475d381ccb7817c3b4dd8cacef2b9eb\"\u003e\u003ccode\u003e9778d26\u003c/code\u003e\u003c/a\u003e BUG: core: Don't call INCREF/DECREF on descr in NpyStringAcquireAllocator. (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/e0e38767d5d0f848ab44befeedcad71e8ef589c7\"\u003e\u003ccode\u003ee0e3876\u003c/code\u003e\u003c/a\u003e BUG: core: Don't call INCREF/DECREF on descr in NpyStringAcquireAllocator. (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/d1bffeb9ec4ec0bf029c94ea35abffa92d5c30f2\"\u003e\u003ccode\u003ed1bffeb\u003c/code\u003e\u003c/a\u003e BUG: \u003ccode\u003enp.linalg.svd(..., hermitian=True)\u003c/code\u003e returns non-unitary \u003ccode\u003evh\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31347\"\u003e#31347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/8d8d7e5a14a1da0bfb0faf609a7a7610c431e6e9\"\u003e\u003ccode\u003e8d8d7e5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31453\"\u003e#31453\u003c/a\u003e from seberg/issue-31452\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/bddaab7ace45f90148d8f2bb6e67daab2d45ec76\"\u003e\u003ccode\u003ebddaab7\u003c/code\u003e\u003c/a\u003e BUG: Fix regression in \u003ccode\u003earr.conj()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/37a1ecca8dff09b2c579a991194ac55b9971f3a7\"\u003e\u003ccode\u003e37a1ecc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numpy/numpy/issues/31444\"\u003e#31444\u003c/a\u003e from charris/begin-2.4.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numpy/numpy/commit/3c0e043217a759a8a948ade158fec14348c3b459\"\u003e\u003ccode\u003e3c0e043\u003c/code\u003e\u003c/a\u003e MAINT: Prepare 2.4.x for further development\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/numpy/numpy/compare/v2.4.4...v2.4.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `openai` from 2.33.0 to 2.44.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.44.0\u003c/h2\u003e\n\u003ch2\u003e2.44.0 (2026-06-24)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.43.0...v2.44.0\"\u003ev2.43.0...v2.44.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e prioritize first auth header (\u003ca href=\"https://github.com/openai/openai-python/commit/797e3362e222ae14e587a4543b76a54d8992d66c\"\u003e797e336\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.43.0\u003c/h2\u003e\n\u003ch2\u003e2.43.0 (2026-06-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.42.0...v2.43.0\"\u003ev2.42.0...v2.43.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/22542358490ef8f31f0d373e17f7b791b3d983ca\"\u003e2254235\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.42.0\u003c/h2\u003e\n\u003ch2\u003e2.42.0 (2026-06-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.41.1...v2.42.0\"\u003ev2.41.1...v2.42.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e admin spend_alerts (\u003ca href=\"https://github.com/openai/openai-python/commit/6134198a488996c4ff6fca4551afd55fb3294fdc\"\u003e6134198\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/f337bf43276c880d2daf09a5d7f9fc9a886c4bf2\"\u003ef337bf4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/7015158c3119acf57af6c20903587cef928530a9\"\u003e7015158\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBuild System\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix release workflow permissions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3389\"\u003e#3389\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a526ee813f085318fe3c6923ac3fa10c1cf56420\"\u003ea526ee8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse CI environment for examples API key (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3394\"\u003e#3394\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d64d811e82aff724397e32d593e50657fee3f905\"\u003ed64d811\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.41.1\u003c/h2\u003e\n\u003ch2\u003e2.41.1 (2026-06-05)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.41.0...v2.41.1\"\u003ev2.41.0...v2.41.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBuild System\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove scheduled release workflow trigger (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3366\"\u003e#3366\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2a91011abc21032db9566b98068afefb5fbb9b24\"\u003e2a91011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.41.0\u003c/h2\u003e\n\u003ch2\u003e2.41.0 (2026-06-03)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.40.0...v2.41.0\"\u003ev2.40.0...v2.41.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/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.44.0 (2026-06-24)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.43.0...v2.44.0\"\u003ev2.43.0...v2.44.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eauth:\u003c/strong\u003e prioritize first auth header (\u003ca href=\"https://github.com/openai/openai-python/commit/797e3362e222ae14e587a4543b76a54d8992d66c\"\u003e797e336\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.43.0 (2026-06-17)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.42.0...v2.43.0\"\u003ev2.42.0...v2.43.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/22542358490ef8f31f0d373e17f7b791b3d983ca\"\u003e2254235\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.42.0 (2026-06-16)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.41.1...v2.42.0\"\u003ev2.41.1...v2.42.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e admin spend_alerts (\u003ca href=\"https://github.com/openai/openai-python/commit/6134198a488996c4ff6fca4551afd55fb3294fdc\"\u003e6134198\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/f337bf43276c880d2daf09a5d7f9fc9a886c4bf2\"\u003ef337bf4\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e update OpenAPI spec or Stainless config (\u003ca href=\"https://github.com/openai/openai-python/commit/7015158c3119acf57af6c20903587cef928530a9\"\u003e7015158\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBuild System\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix release workflow permissions (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3389\"\u003e#3389\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/a526ee813f085318fe3c6923ac3fa10c1cf56420\"\u003ea526ee8\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse CI environment for examples API key (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3394\"\u003e#3394\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/d64d811e82aff724397e32d593e50657fee3f905\"\u003ed64d811\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.41.1 (2026-06-05)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.41.0...v2.41.1\"\u003ev2.41.0...v2.41.1\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eBuild System\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove scheduled release workflow trigger (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3366\"\u003e#3366\u003c/a\u003e) (\u003ca href=\"https://github.com/openai/openai-python/commit/2a91011abc21032db9566b98068afefb5fbb9b24\"\u003e2a91011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.41.0 (2026-06-03)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/openai/openai-python/compare/v2.40.0...v2.41.0\"\u003ev2.40.0...v2.41.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e responses.moderation and chat_completions.moderation (\u003ca href=\"https://github.com/openai/openai-python/commit/87e46c25ac9ca8cff407b52ad9fb33e326c059d6\"\u003e87e46c2\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.40.0 (2026-06-01)\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/openai/openai-python/commit/6d9262d5c666a1e4d47f63178db907ba3087ac5d\"\u003e\u003ccode\u003e6d9262d\u003c/code\u003e\u003c/a\u003e release: 2.44.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/d35627525e192b7a65b556d8a79d22079ccabdf6\"\u003e\u003ccode\u003ed356275\u003c/code\u003e\u003c/a\u003e [codex] Add AWS Bedrock provider authentication (\u003ca href=\"https://redirect.github.com/openai/openai-python/issues/3398\"\u003e#3398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/f47f9a270861ca6a6096e8ea15ef8f3e1fb089b0\"\u003e\u003ccode\u003ef47f9a2\u003c/code\u003e\u003c/a\u003e fix(auth): prioritize first auth header\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/e20b6b82c145091f0d8412a7e4a9bc5900a40462\"\u003e\u003ccode\u003ee20b6b8\u003c/code\u003e\u003c/a\u003e release: 2.43.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/4d354538e8c2618e228c80f1fdc332ee1f70d1f2\"\u003e\u003ccode\u003e4d35453\u003c/code\u003e\u003c/a\u003e feat(api): update OpenAPI spec or Stainless config\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/2bba15e71817a75e9b8517e09cb244bc144b50d0\"\u003e\u003ccode\u003e2bba15e\u003c/code\u003e\u003c/a\u003e release: 2.42.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/1ec3e8298982d900d31b486177b5d4cecadcf035\"\u003e\u003ccode\u003e1ec3e82\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/93c2eca17d2d484b95245c849b39f51c6d291478\"\u003e\u003ccode\u003e93c2eca\u003c/code\u003e\u003c/a\u003e feat(api): manual updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/b269f88a30fcfbcceea1cc30deb00405db88c5e6\"\u003e\u003ccode\u003eb269f88\u003c/code\u003e\u003c/a\u003e codegen metadata\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/openai/openai-python/commit/ee821d6b4a59d6b73850640162b6454da434f5f7\"\u003e\u003ccode\u003eee821d6\u003c/code\u003e\u003c/a\u003e feat(api): admin spend_alerts\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/openai/openai-python/compare/v2.33.0...v2.44.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic` from 2.13.3 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\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic/blob/main/HISTORY.md\"\u003epydantic's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.13.4 (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pydantic/pydantic/releases/tag/v2.13.4\"\u003eGitHub release\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eWhat's Changed\u003c/h3\u003e\n\u003ch4\u003ePackaging\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003eBump libc from 0.2.155 to 0.2.185 by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13109\"\u003e#13109\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdapt \u003ccode\u003epydantic-core\u003c/code\u003e linker flags on macOS by \u003ca href=\"https://github.com/washingtoneg\"\u003e\u003ccode\u003e@​washingtoneg\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13147\"\u003e#13147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4\u003eFixes\u003c/h4\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve \u003ccode\u003eRootModel\u003c/code\u003e core metadata by \u003ca href=\"https://github.com/Viicos\"\u003e\u003ccode\u003e@​Viicos\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic/pull/13129\"\u003e#13129\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/compare/v2.13.3...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.14.0 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\u003c/blockquote\u003e\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 gro...\n\n_Description has been truncated_","html_url":"https://github.com/khozhaniyazov/opensamga/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/khozhaniyazov%2Fopensamga/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"}},{"old_version":"2026.5.20","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-06-28T20:07:52.000Z","version_change":"2026.5.20 → 2026.6.17","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":"2026.2.25","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-06-28T08:18:40.000Z","version_change":"2026.2.25 → 2026.6.17","issue":{"uuid":"4761574242","node_id":"PR_kwDORqKQ1c7rdAKc","number":16,"state":"closed","title":"build(deps): bump the python-production group with 86 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-07-05T03:15:46.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-28T08:18:40.000Z","updated_at":"2026-07-05T03:15:48.000Z","time_to_close":586626,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps): bump","group_name":"python-production","update_count":86,"packages":[{"name":"altair","old_version":"6.0.0","new_version":"6.2.2","repository_url":"https://github.com/vega/altair"},{"name":"anthropic","old_version":"0.86.0","new_version":"0.112.0","repository_url":"https://github.com/anthropics/anthropic-sdk-python"},{"name":"anyio","old_version":"4.12.1","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"attrs","old_version":"25.4.0","new_version":"26.1.0","repository_url":"https://github.com/python-attrs/attrs"},{"name":"cachetools","old_version":"7.0.5","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"click","old_version":"8.3.1","new_version":"8.4.2","repository_url":"https://github.com/pallets/click"},{"name":"docstring-parser","old_version":"0.17.0","new_version":"0.18.0","repository_url":"https://github.com/rr-/docstring_parser"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [altair](https://github.com/vega/altair), [anthropic](https://github.com/anthropics/anthropic-sdk-python), [anyio](https://github.com/agronholm/anyio), [attrs](https://github.com/python-attrs/attrs), [cachetools](https://github.com/tkem/cachetools), [certifi](https://github.com/certifi/python-certifi), [charset-normalizer](https://github.com/jawah/charset_normalizer), [click](https://github.com/pallets/click), [docstring-parser](https://github.com/rr-/docstring_parser), [duckdb](https://github.com/duckdb/duckdb-python), [filelock](https://github.com/tox-dev/py-filelock), [fonttools](https://github.com/fonttools/fonttools), [fsspec](https://github.com/fsspec/filesystem_spec), [gitpython](https://github.com/gitpython-developers/GitPython), [googleapis-common-protos](https://github.com/googleapis/google-cloud-python), [hf-xet](https://github.com/huggingface/xet-core), [holidays](https://github.com/vacanza/holidays), [huggingface-hub](https://github.com/huggingface/huggingface_hub), [idna](https://github.com/kjd/idna), [importlib-metadata](https://github.com/python/importlib_metadata), [importlib-resources](https://github.com/python/importlib_resources), [jiter](https://github.com/pydantic/jiter), [jsonpointer](https://github.com/stefankoegl/python-json-pointer), [langchain-core](https://github.com/langchain-ai/langchain), [langfuse](https://github.com/langfuse/langfuse), [langgraph](https://github.com/langchain-ai/langgraph), [langgraph-checkpoint](https://github.com/langchain-ai/langgraph), [langgraph-prebuilt](https://github.com/langchain-ai/langgraph), [langgraph-sdk](https://github.com/langchain-ai/langgraph), [langsmith](https://github.com/langchain-ai/langsmith-sdk), [markdown-it-py](https://github.com/executablebooks/markdown-it-py), [matplotlib](https://github.com/matplotlib/matplotlib), [mpmath](https://github.com/mpmath/mpmath), [narwhals](https://github.com/narwhals-dev/narwhals), [numpy](https://github.com/numpy/numpy), [openai](https://github.com/openai/openai-python), [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-exporter-otlp-proto-common](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-exporter-otlp-proto-http](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-proto](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-sdk](https://github.com/open-telemetry/opentelemetry-python), [opentelemetry-semantic-conventions](https://github.com/open-telemetry/opentelemetry-python), [orjson](https://github.com/ijl/orjson), [packaging](https://github.com/pypa/packaging), [pandas](https://github.com/pandas-dev/pandas), [pillow](https://github.com/python-pillow/Pillow), [protobuf](https://github.com/protocolbuffers/protobuf), [pyarrow](https://github.com/apache/arrow), [pydantic](https://github.com/pydantic/pydantic), [pydantic-core](https://github.com/pydantic/pydantic), [pydeck](https://github.com/visgl/deck.gl), [pygments](https://github.com/pygments/pygments), [pytest](https://github.com/pytest-dev/pytest), [pytz](https://github.com/stub42/pytz), [regex](https://github.com/mrabarnett/mrab-regex), [requests](https://github.com/psf/requests), [rich](https://github.com/Textualize/rich), [rpds-py](https://github.com/crate-py/rpds), [safetensors](https://github.com/huggingface/safetensors), [scikit-learn](https://github.com/scikit-learn/scikit-learn), [scipy](https://github.com/scipy/scipy), [sentence-transformers](https://github.com/huggingface/sentence-transformers), [streamlit](https://github.com/streamlit/streamlit), [tokenizers](https://github.com/huggingface/tokenizers), [torch](https://github.com/pytorch/pytorch), [tornado](https://github.com/tornadoweb/tornado), [tqdm](https://github.com/tqdm/tqdm), [transformers](https://github.com/huggingface/transformers), [typer](https://github.com/fastapi/typer), [tzdata](https://github.com/python/tzdata), [urllib3](https://github.com/urllib3/urllib3), [uuid-utils](https://github.com/aminalaee/uuid-utils), [wrapt](https://github.com/GrahamDumpleton/wrapt), [xxhash](https://github.com/ifduyue/python-xxhash), [zipp](https://github.com/jaraco/zipp), [fastapi](https://github.com/fastapi/fastapi), [python-multipart](https://github.com/Kludex/python-multipart), [sentry-sdk](https://github.com/getsentry/sentry-python), [resend](https://github.com/resendlabs/resend-python), [uvicorn](https://github.com/Kludex/uvicorn), [sse-starlette](https://github.com/sysid/sse-starlette), [python-jose](https://github.com/mpdavis/python-jose), [email-validator](https://github.com/JoshData/python-email-validator), [langgraph-checkpoint-sqlite](https://github.com/langchain-ai/langgraph), [openpyxl](https://openpyxl.readthedocs.io) and [redis](https://github.com/redis/redis-py) to permit the latest version.\nUpdates `altair` from 6.0.0 to 6.2.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/vega/altair/releases\"\u003ealtair's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 6.2.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: Avoid layered concat view name collisions by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4066\"\u003evega/altair#4066\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Include layered concat views in selection params by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4069\"\u003evega/altair#4069\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocs: Add an Andrews curves example to the gallery by \u003ca href=\"https://github.com/kyo5uke\"\u003e\u003ccode\u003e@​kyo5uke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4049\"\u003evega/altair#4049\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Add an interactive bin-size example to the gallery by \u003ca href=\"https://github.com/kyo5uke\"\u003e\u003ccode\u003e@​kyo5uke\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4050\"\u003evega/altair#4050\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Validate docs publish clone by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4064\"\u003evega/altair#4064\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix broken example and sync with VL by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4010\"\u003evega/altair#4010\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eci: Make warning for doc preview page more prominent by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4048\"\u003evega/altair#4048\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Check uv lockfile by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4052\"\u003evega/altair#4052\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Run docs build only for docs-related changes and don't duplicate builds on PRs by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4053\"\u003evega/altair#4053\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Update dependencies from dependabot alerts by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4055\"\u003evega/altair#4055\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Upload docs build artifact for PR preview by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4056\"\u003evega/altair#4056\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Reduce dependabot PRs by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4028\"\u003evega/altair#4028\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Correctly resolve docbuild worflow number from PR number by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4060\"\u003evega/altair#4060\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Group major GitHub Actions updates by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4061\"\u003evega/altair#4061\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Rename docbuild job from 'build' to 'docbuild' by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4062\"\u003evega/altair#4062\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Schedule release drafts twice monthly by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4057\"\u003evega/altair#4057\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Publish official docs after release is published by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4054\"\u003evega/altair#4054\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Document how local versioning works and add base tag by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4051\"\u003evega/altair#4051\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Disambiguate workflow naming by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4063\"\u003evega/altair#4063\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: enable partial Python 3.14t coverage by \u003ca href=\"https://github.com/axelray-dev\"\u003e\u003ccode\u003e@​axelray-dev\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4038\"\u003evega/altair#4038\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/kyo5uke\"\u003e\u003ccode\u003e@​kyo5uke\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4049\"\u003evega/altair#4049\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vega/altair/compare/v6.2.1...v6.2.2\"\u003ehttps://github.com/vega/altair/compare/v6.2.1...v6.2.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.2.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: Write dataset cache files atomically by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4034\"\u003evega/altair#4034\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eci: Prevent uv from dirtying worktree during publish by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4045\"\u003evega/altair#4045\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: Clarify release review instructions by \u003ca href=\"https://github.com/joelostblom\"\u003e\u003ccode\u003e@​joelostblom\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/4046\"\u003evega/altair#4046\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/vega/altair/compare/v6.2.0...v6.2.1\"\u003ehttps://github.com/vega/altair/compare/v6.2.0...v6.2.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 6.2.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003cp\u003eThis is the first release in an effort to have smaller, more frequent releases going forward. By making the release process more convenient, we aim to more quickly push out fixes and features that already landed on the main branch to a released version of Altair.\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/vega/altair/commit/a9765713566095349cb1cfbbe85d6ad258c84245\"\u003e\u003ccode\u003ea976571\u003c/code\u003e\u003c/a\u003e fix: Include layered concat views in selection params (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4069\"\u003e#4069\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/432157b2304e0e30d89167ab26d1f7987f615a31\"\u003e\u003ccode\u003e432157b\u003c/code\u003e\u003c/a\u003e fix: Avoid layered concat view name collisions (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4066\"\u003e#4066\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/b875b95a24ee20f8e5665a730ee6d80cb6d55348\"\u003e\u003ccode\u003eb875b95\u003c/code\u003e\u003c/a\u003e docs: Fix a broken example and sync another one with VL (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4010\"\u003e#4010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/7b289f9adf07d960f94620ef02c33b8f400f4948\"\u003e\u003ccode\u003e7b289f9\u003c/code\u003e\u003c/a\u003e ci: Enable partial Python 3.14t coverage (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4038\"\u003e#4038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/105ff2b4957651bf4cf55e4e2586705fa02ddfe7\"\u003e\u003ccode\u003e105ff2b\u003c/code\u003e\u003c/a\u003e docs: Validate docs publish clone (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4064\"\u003e#4064\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/c82dd2e4af3bcd06ee4909cc38135d1b7f92c3dd\"\u003e\u003ccode\u003ec82dd2e\u003c/code\u003e\u003c/a\u003e ci: Disambiguate workflow naming (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4063\"\u003e#4063\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/624bee9705b345961c9b225d39562a10068461af\"\u003e\u003ccode\u003e624bee9\u003c/code\u003e\u003c/a\u003e docs: Add an interactive bin-size example to the gallery (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4050\"\u003e#4050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/3b1acf676a1a61d9df8d1ded2393dfde49587cae\"\u003e\u003ccode\u003e3b1acf6\u003c/code\u003e\u003c/a\u003e docs: Add an Andrews curves example to the gallery (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4049\"\u003e#4049\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/edea5f64e7e893315e2050672058f86657b28201\"\u003e\u003ccode\u003eedea5f6\u003c/code\u003e\u003c/a\u003e ci: Document how local versioning works and add base tag (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4051\"\u003e#4051\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/f8b4337e1355ca229d1e2e9645e89b6ec1a7a41c\"\u003e\u003ccode\u003ef8b4337\u003c/code\u003e\u003c/a\u003e ci: Publish official docs after release is published (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4054\"\u003e#4054\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/vega/altair/compare/v6.0.0...v6.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `anthropic` from 0.86.0 to 0.112.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.112.0\u003c/h2\u003e\n\u003ch2\u003e0.112.0 (2026-06-24)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.111.0...v0.112.0\"\u003ev0.111.0...v0.112.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add support for system.message streaming events (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2450d595731f9532080bb94eb8a43c0bd5189659\"\u003e2450d59\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ememory tool:\u003c/strong\u003e create parent directories with the correct permissions (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/135\"\u003e#135\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f2fc2a9e0ad8507e4108e9a6b85d023416c2f14c\"\u003ef2fc2a9\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/5ab533e58ee99bcd2e5071bab91d99caee66aa6a\"\u003e5ab533e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for sending User Profile ID in request headers (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/83319bed74f4414d54e0f4237d70b945ed671008\"\u003e83319be\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.111.0\u003c/h2\u003e\n\u003ch2\u003e0.111.0 (2026-06-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.110.0...v0.111.0\"\u003ev0.110.0...v0.111.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ehelpers:\u003c/strong\u003e tag refusal-fallback middleware requests with fallback-refusal-middleware (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/96\"\u003e#96\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2f8ac789506efc0719b06f1f646c9a98bb25ce7b\"\u003e2f8ac78\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.110.0\u003c/h2\u003e\n\u003ch2\u003e0.110.0 (2026-06-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.109.2...v0.110.0\"\u003ev0.109.2...v0.110.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 new code_execution_20260120 tool (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5e23212dc0883174c879b97ef8e7e33ead4e8da5\"\u003e5e23212\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eappend x-stainless-helper across header merges instead of clobbering (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/105\"\u003e#105\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/922558e2ce52e18863dab27bcc04067068827364\"\u003e922558e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebedrock:\u003c/strong\u003e preserve stream event type (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1682\"\u003e#1682\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b27e3439699174dbc41e34e2d6ef5cb1e2930c18\"\u003eb27e343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ehelpers:\u003c/strong\u003e single source of truth for x-stainless-helper key + closed value vocabulary (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/95\"\u003e#95\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e6f7a56bb624f4c946cb15ba7973fd6fe052e10f\"\u003ee6f7a56\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev0.109.2\u003c/h2\u003e\n\u003ch2\u003e0.109.2 (2026-06-15)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.109.1...v0.109.2\"\u003ev0.109.1...v0.109.2\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/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.112.0 (2026-06-24)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.111.0...v0.112.0\"\u003ev0.111.0...v0.112.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eclient:\u003c/strong\u003e add support for system.message streaming events (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2450d595731f9532080bb94eb8a43c0bd5189659\"\u003e2450d59\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ememory tool:\u003c/strong\u003e create parent directories with the correct permissions (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/135\"\u003e#135\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/f2fc2a9e0ad8507e4108e9a6b85d023416c2f14c\"\u003ef2fc2a9\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/5ab533e58ee99bcd2e5071bab91d99caee66aa6a\"\u003e5ab533e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e add support for sending User Profile ID in request headers (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/83319bed74f4414d54e0f4237d70b945ed671008\"\u003e83319be\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.111.0 (2026-06-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.110.0...v0.111.0\"\u003ev0.110.0...v0.111.0\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ehelpers:\u003c/strong\u003e tag refusal-fallback middleware requests with fallback-refusal-middleware (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/96\"\u003e#96\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/2f8ac789506efc0719b06f1f646c9a98bb25ce7b\"\u003e2f8ac78\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.110.0 (2026-06-18)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.109.2...v0.110.0\"\u003ev0.109.2...v0.110.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 new code_execution_20260120 tool (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5e23212dc0883174c879b97ef8e7e33ead4e8da5\"\u003e5e23212\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eappend x-stainless-helper across header merges instead of clobbering (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/105\"\u003e#105\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/922558e2ce52e18863dab27bcc04067068827364\"\u003e922558e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ebedrock:\u003c/strong\u003e preserve stream event type (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/1682\"\u003e#1682\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/b27e3439699174dbc41e34e2d6ef5cb1e2930c18\"\u003eb27e343\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ehelpers:\u003c/strong\u003e single source of truth for x-stainless-helper key + closed value vocabulary (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/95\"\u003e#95\u003c/a\u003e) (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e6f7a56bb624f4c946cb15ba7973fd6fe052e10f\"\u003ee6f7a56\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.109.2 (2026-06-15)\u003c/h2\u003e\n\u003cp\u003eFull Changelog: \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.109.1...v0.109.2\"\u003ev0.109.1...v0.109.2\u003c/a\u003e\u003c/p\u003e\n\u003ch3\u003eChores\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eapi:\u003c/strong\u003e remove retired models from API and SDKs (\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/d4bcfcc257bd0c97d5e75060bd19c97abddd9f49\"\u003ed4bcfcc\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/c986624e451a640040ac9bdfd87054372456af0b\"\u003e\u003ccode\u003ec986624\u003c/code\u003e\u003c/a\u003e release: 0.112.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/e633dff66fb9f14e1711bc20d06ba2b894cdf000\"\u003e\u003ccode\u003ee633dff\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/a28468efa7b9188095ad8b542da2d2b050ed732a\"\u003e\u003ccode\u003ea28468e\u003c/code\u003e\u003c/a\u003e chore(api): add support for sending User Profile ID in request headers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/97d3d9b53a07e5e4e2b4107793f228a4898c61f6\"\u003e\u003ccode\u003e97d3d9b\u003c/code\u003e\u003c/a\u003e fix(memory tool): create parent directories with the correct permissions (\u003ca href=\"https://redirect.github.com/anthropics/anthropic-sdk-python/issues/135\"\u003e#135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/0868a68884fc73dc844f92cde5b172ee86f5aa3c\"\u003e\u003ccode\u003e0868a68\u003c/code\u003e\u003c/a\u003e feat(client): add support for system.message streaming events\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/5d6fd8d3f46dfffdc7d1579674053c6efe9d6508\"\u003e\u003ccode\u003e5d6fd8d\u003c/code\u003e\u003c/a\u003e release: 0.111.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/9fdf2efcf79c09a086169ea4710ec4b379565453\"\u003e\u003ccode\u003e9fdf2ef\u003c/code\u003e\u003c/a\u003e feat(helpers): tag refusal-fallback middleware requests with fallback-refusal...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/af2b702140d8c53ba841b590b5022053c616c4d7\"\u003e\u003ccode\u003eaf2b702\u003c/code\u003e\u003c/a\u003e release: 0.110.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/a10dbaabdf6e0f9dda126c8014465c797f9ff008\"\u003e\u003ccode\u003ea10dbaa\u003c/code\u003e\u003c/a\u003e feat(api): add support for new code_execution_20260120 tool\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/commit/9d49b634b44bd70ae344d1e0574347eda2a8ef10\"\u003e\u003ccode\u003e9d49b63\u003c/code\u003e\u003c/a\u003e fix(helpers): single source of truth for x-stainless-helper key + closed valu...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/anthropics/anthropic-sdk-python/compare/v0.86.0...v0.112.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.12.1 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.12.1...4.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `attrs` from 25.4.0 to 26.1.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-attrs/attrs/releases\"\u003eattrs's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.1.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eThe main outward change here only affects people using field transformers, but it should be a nice quality of life improvement!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eFull changelog below!\u003c/em\u003e\u003c/p\u003e\n\u003ch2\u003eSpecial Thanks\u003c/h2\u003e\n\u003cp\u003eThis release would not be possible without my generous sponsors! Thank you to all of you making sustainable maintenance possible! If \u003cem\u003eyou\u003c/em\u003e would like to join them, go to \u003ca href=\"https://github.com/sponsors/hynek\"\u003ehttps://github.com/sponsors/hynek\u003c/a\u003e and check out the sweet perks!\u003c/p\u003e\n\u003ch3\u003eAbove and Beyond\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://www.variomedia.de/\"\u003eVariomedia AG\u003c/a\u003e (@\u003ca href=\"https://github.com/variomedia\"\u003evariomedia\u003c/a\u003e), \u003ca href=\"https://www.tidelift.com/\"\u003eTidelift\u003c/a\u003e (@\u003ca href=\"https://github.com/tidelift\"\u003etidelift\u003c/a\u003e), \u003ca href=\"https://kraken.tech\"\u003eKraken Tech\u003c/a\u003e (@\u003ca href=\"https://github.com/kraken-tech\"\u003ekraken-tech\u003c/a\u003e), \u003ca href=\"https://privacy-solutions.org\"\u003ePrivacy Solutions GmbH\u003c/a\u003e (@\u003ca href=\"https://github.com/privacy-solutions\"\u003eprivacy-solutions\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://github.com/filepreviews\"\u003efilepreviews\u003c/a\u003e), \u003ca href=\"https://ecosyste.ms\"\u003eEcosystems\u003c/a\u003e (@\u003ca href=\"https://github.com/ecosyste-ms\"\u003eecosyste-ms\u003c/a\u003e), \u003ca href=\"https://www.lambdatest.com\"\u003eTestMu AI Open Source Office (Formerly LambdaTest)\u003c/a\u003e (@\u003ca href=\"https://github.com/LambdaTest-Inc\"\u003eLambdaTest-Inc\u003c/a\u003e), \u003ca href=\"https://doist.com/\"\u003eDoist\u003c/a\u003e (@\u003ca href=\"https://github.com/Doist\"\u003eDoist\u003c/a\u003e), Daniel Fortunov (@\u003ca href=\"https://github.com/asqui\"\u003easqui\u003c/a\u003e), and Kevin P. Fleming (@\u003ca href=\"https://github.com/kpfleming\"\u003ekpfleming\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMaintenance Sustainers\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://buttondown.com\"\u003eButtondown\u003c/a\u003e (@\u003ca href=\"https://github.com/buttondown\"\u003ebuttondown\u003c/a\u003e), \u003ca href=\"https://christopher.xyz\"\u003eChristopher Dignam\u003c/a\u003e (@\u003ca href=\"https://github.com/chdsbd\"\u003echdsbd\u003c/a\u003e), Magnus Watn (@\u003ca href=\"https://github.com/magnuswatn\"\u003emagnuswatn\u003c/a\u003e), \u003ca href=\"https://cra.mr\"\u003eDavid Cramer\u003c/a\u003e (@\u003ca href=\"https://github.com/dcramer\"\u003edcramer\u003c/a\u003e), \u003ca href=\"https://rivolaks.com\"\u003eRivo Laks\u003c/a\u003e (@\u003ca href=\"https://github.com/rivol\"\u003erivol\u003c/a\u003e), \u003ca href=\"https://polar.sh\"\u003ePolar\u003c/a\u003e (@\u003ca href=\"https://github.com/polarsource\"\u003epolarsource\u003c/a\u003e), \u003ca href=\"https://miketheman.dev\"\u003eMike Fiedler\u003c/a\u003e (@\u003ca href=\"https://github.com/miketheman\"\u003emiketheman\u003c/a\u003e), Duncan Hill (@\u003ca href=\"https://github.com/cricalix\"\u003ecricalix\u003c/a\u003e), Colin Marquardt (@\u003ca href=\"https://github.com/cmarqu\"\u003ecmarqu\u003c/a\u003e), \u003ca href=\"https://blog.journeythatcounts.nl\"\u003ePieter Swinkels\u003c/a\u003e (@\u003ca href=\"https://github.com/swinkels\"\u003eswinkels\u003c/a\u003e), Nick Libertini (@\u003ca href=\"https://github.com/libertininick\"\u003elibertininick\u003c/a\u003e), \u003ca href=\"https://bmdphd.info/\"\u003eBrian M. Dennis\u003c/a\u003e (@\u003ca href=\"https://github.com/crossjam\"\u003ecrossjam\u003c/a\u003e), Celebrity News AG (@\u003ca href=\"https://github.com/celebritynewsag\"\u003ecelebritynewsag\u003c/a\u003e), \u003ca href=\"https://westervelt.com\"\u003eThe Westervelt Company\u003c/a\u003e (@\u003ca href=\"https://github.com/westerveltco\"\u003ewesterveltco\u003c/a\u003e), \u003ca href=\"https://slafs.net\"\u003eSławomir Ehlert\u003c/a\u003e (@\u003ca href=\"https://github.com/slafs\"\u003eslafs\u003c/a\u003e), Mostafa Khalil (@\u003ca href=\"https://github.com/khadrawy\"\u003ekhadrawy\u003c/a\u003e), \u003ca href=\"https://fmularczyk.pl\"\u003eFilip Mularczyk\u003c/a\u003e (@\u003ca href=\"https://github.com/mukiblejlok\"\u003emukiblejlok\u003c/a\u003e), Thomas Klinger (@\u003ca href=\"https://github.com/thmsklngr\"\u003ethmsklngr\u003c/a\u003e), \u003ca href=\"https://poehlmann.io\"\u003eAndreas Poehlmann\u003c/a\u003e (@\u003ca href=\"https://github.com/ap--\"\u003eap--\u003c/a\u003e), \u003ca href=\"https://atbigelow.com\"\u003eAugust Trapper Bigelow\u003c/a\u003e (@\u003ca href=\"https://github.com/atbigelow\"\u003eatbigelow\u003c/a\u003e), \u003ca href=\"https://noumenal.es/\"\u003eCarlton Gibson\u003c/a\u003e (@\u003ca href=\"https://github.com/carltongibson\"\u003ecarltongibson\u003c/a\u003e), and \u003ca href=\"https://roboflow.com\"\u003eRoboflow\u003c/a\u003e (@\u003ca href=\"https://github.com/roboflow\"\u003eroboflow\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003eFull Changelog\u003c/h2\u003e\n\u003ch3\u003eBackwards-incompatible Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eField aliases are now resolved \u003cem\u003ebefore\u003c/em\u003e calling \u003ccode\u003efield_transformer\u003c/code\u003e, so transformers receive fully populated \u003ccode\u003eAttribute\u003c/code\u003e objects with usable \u003ccode\u003ealias\u003c/code\u003e values instead of \u003ccode\u003eNone\u003c/code\u003e. The new \u003ccode\u003eAttribute.alias_is_default\u003c/code\u003e flag indicates whether the alias was auto-generated (\u003ccode\u003eTrue\u003c/code\u003e) or explicitly set by the user (\u003ccode\u003eFalse\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1509\"\u003e#1509\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotations for \u003ccode\u003eattrs.validators.optional()\u003c/code\u003e, so it no longer rejects tuples with more than one validator. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eattrs.validators.disabled()\u003c/code\u003e contextmanager can now be nested. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFrozen classes can set \u003ccode\u003eon_setattr=attrs.setters.NO_OP\u003c/code\u003e in addition to \u003ccode\u003eNone\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1515\"\u003e#1515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIt's now possible to pass \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003einstances\u003c/strong\u003e in addition to \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003eclasses\u003c/strong\u003e to \u003ccode\u003eattrs.fields()\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003eThis release contains contributions from \u003ca href=\"https://github.com/bysiber\"\u003e\u003ccode\u003e@​bysiber\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/DavidCEllis\"\u003e\u003ccode\u003e@​DavidCEllis\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/finite-state-machine\"\u003e\u003ccode\u003e@​finite-state-machine\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/hynek\"\u003e\u003ccode\u003e@​hynek\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/veeceey\"\u003e\u003ccode\u003e@​veeceey\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/vstinner\"\u003e\u003ccode\u003e@​vstinner\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eArtifact Attestations\u003c/h2\u003e\n\u003cp\u003eYou can verify this release's \u003ca href=\"https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds\"\u003eartifact attestions\u003c/a\u003e using \u003ca href=\"https://cli.github.com\"\u003eGitHub's CLI tool\u003c/a\u003e by downloading the sdist and wheel from \u003ca href=\"https://pypi.org/project/attrs\"\u003ePyPI\u003c/a\u003e and running:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ gh attestation verify --owner python-attrs attrs-26.1.0.tar.gz\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-attrs/attrs/blob/main/CHANGELOG.md\"\u003eattrs's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/python-attrs/attrs/tree/26.1.0\"\u003e26.1.0\u003c/a\u003e - 2026-03-19\u003c/h2\u003e\n\u003ch3\u003eBackwards-incompatible Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eField aliases are now resolved \u003cem\u003ebefore\u003c/em\u003e calling \u003ccode\u003efield_transformer\u003c/code\u003e, so transformers receive fully populated \u003ccode\u003eAttribute\u003c/code\u003e objects with usable \u003ccode\u003ealias\u003c/code\u003e values instead of \u003ccode\u003eNone\u003c/code\u003e.\nThe new \u003ccode\u003eAttribute.alias_is_default\u003c/code\u003e flag indicates whether the alias was auto-generated (\u003ccode\u003eTrue\u003c/code\u003e) or explicitly set by the user (\u003ccode\u003eFalse\u003c/code\u003e).\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1509\"\u003e#1509\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix type annotations for \u003ccode\u003eattrs.validators.optional()\u003c/code\u003e, so it no longer rejects tuples with more than one validator.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eattrs.validators.disabled()\u003c/code\u003e contextmanager can now be nested.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFrozen classes can set \u003ccode\u003eon_setattr=attrs.setters.NO_OP\u003c/code\u003e in addition to \u003ccode\u003eNone\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1515\"\u003e#1515\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIt's now possible to pass \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003einstances\u003c/strong\u003e in addition to \u003cem\u003eattrs\u003c/em\u003e \u003cstrong\u003eclasses\u003c/strong\u003e to \u003ccode\u003eattrs.fields()\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/7bfc49e9b22d5ba25b6e429524c3d49fee27cb36\"\u003e\u003ccode\u003e7bfc49e\u003c/code\u003e\u003c/a\u003e Prepare 26.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/31e02869da10824b492c378c1dc87ccc720ee5ad\"\u003e\u003ccode\u003e31e0286\u003c/code\u003e\u003c/a\u003e Update test_validators.py for Python 3.15a7 (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1530\"\u003e#1530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/48b8611c27779811d161200e17de8da24aae7feb\"\u003e\u003ccode\u003e48b8611\u003c/code\u003e\u003c/a\u003e Add instance support to attrs.fields() (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1529\"\u003e#1529\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/3a68d4913221abc6f8ad3be50937f7ae49300a98\"\u003e\u003ccode\u003e3a68d49\u003c/code\u003e\u003c/a\u003e dev: document missing git tags failure mode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/a572c3a4c558a8b9b48cf989fcd956ab1a279439\"\u003e\u003ccode\u003ea572c3a\u003c/code\u003e\u003c/a\u003e Allow field(on_setattr=NO_OP) on frozen classes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/af9c510912ce604a94896cc35c27368d5baf6ae6\"\u003e\u003ccode\u003eaf9c510\u003c/code\u003e\u003c/a\u003e Fix validators.disabled() to save/restore state on nesting (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1513\"\u003e#1513\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/ab7f8b2f4c0f747d5b1575247ce35e5adaad182e\"\u003e\u003ccode\u003eab7f8b2\u003c/code\u003e\u003c/a\u003e update dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/ce89f5d11feb0805da9ed10bb165238cc959f1bb\"\u003e\u003ccode\u003ece89f5d\u003c/code\u003e\u003c/a\u003e Fix message passing in frozen errors\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/eccd966d80aff5196efc959316961cfa780439f9\"\u003e\u003ccode\u003eeccd966\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eoptional\u003c/code\u003e validator to accept tuples of len \u0026gt; 1 (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1496\"\u003e#1496\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-attrs/attrs/commit/e92fe52dfe1eb07167e6473724c5a8ada978add0\"\u003e\u003ccode\u003ee92fe52\u003c/code\u003e\u003c/a\u003e policies: tighten screws (\u003ca href=\"https://redirect.github.com/python-attrs/attrs/issues/1528\"\u003e#1528\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-attrs/attrs/compare/25.4.0...26.1.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.0.5 to 7.1.4\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst\"\u003ecachetools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev7.1.4 (2026-05-22)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor unit test improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate build environment.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.1.3 (2026-05-18)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor type stub improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate build environment.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.1.2 (2026-05-16)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor type stub improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMinor documentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eModernize build environment.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.1.1 (2026-05-03)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eVarious type stub improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.1.0 (2026-05-01)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd type stubs based on the work of the good people at \u003ccode\u003etypeshed \u0026lt;https://github.com/python/typeshed/tree/main/stubs/cachetools/\u0026gt;\u003c/code\u003e__.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate unit tests.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.6 (2026-04-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMinor code improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate project URLs.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate CI environment.\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/tkem/cachetools/commit/48284d73d0a8834c9c50f8d41bb99e6f93b2dfed\"\u003e\u003ccode\u003e48284d7\u003c/code\u003e\u003c/a\u003e Release v7.1.4.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/55ea96b88a485fca9effae0f838186274f00897c\"\u003e\u003ccode\u003e55ea96b\u003c/code\u003e\u003c/a\u003e Update build environment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/c5439fe5dc883220b59469e450dbcbf9f4c2e52d\"\u003e\u003ccode\u003ec5439fe\u003c/code\u003e\u003c/a\u003e Add threading tests for lock-only decorators.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/91828fccd629d426157a165d38563614ba06a875\"\u003e\u003ccode\u003e91828fc\u003c/code\u003e\u003c/a\u003e Run threading tests unconditionally with timeout.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/16952edb1eb2d2ced7601e12db722008e5156912\"\u003e\u003ccode\u003e16952ed\u003c/code\u003e\u003c/a\u003e Release v7.1.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/92dd756b93813d1ddfe70893e9c219342a52e19a\"\u003e\u003ccode\u003e92dd756\u003c/code\u003e\u003c/a\u003e Prepare v7.1.3.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/ced08f52ef792a010b8171715c7842da4e11b9ac\"\u003e\u003ccode\u003eced08f5\u003c/code\u003e\u003c/a\u003e Improve cachetools.func type stubs.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/d809d7be5a222effd3663c33baaaee3802972daa\"\u003e\u003ccode\u003ed809d7b\u003c/code\u003e\u003c/a\u003e Update build environment.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/c84b5e5be3d33a32d33f0988b524fb86de1e44f2\"\u003e\u003ccode\u003ec84b5e5\u003c/code\u003e\u003c/a\u003e Release v7.1.2.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/39ad61c1db56600fe903f3c4216996c491e775bf\"\u003e\u003ccode\u003e39ad61c\u003c/code\u003e\u003c/a\u003e Prepare v7.1.2.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.0.5...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.06.17\"\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.6 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\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.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\u003c/blockquote\u003e\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.6...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.3.1 to 8.4.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.2\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.2/\"\u003ehttps://pypi.org/project/click/8.4.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-2\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/34\"\u003ehttps://github.com/pallets/click/milestone/34\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix Fish shell completion broken in \u003ccode\u003e8.4.0\u003c/code\u003e by \u003ca href=\"https://redirect.github.com/pallets/click/issues/3126\"\u003e#3126\u003c/a\u003e. Newlines and\ntabs in option help text are now escaped, keeping the original completion\nformat while still supporting multi-line help. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3502\"\u003e#3502\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3043\"\u003e#3043\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3504\"\u003e#3504\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3508\"\u003e#3508\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecated commands and options with empty or missing help text no longer\nrender a stray leading space before the \u003ccode\u003e(DEPRECATED)\u003c/code\u003e label. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3509\"\u003e#3509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eA {class}\u003ccode\u003eGroup\u003c/code\u003e with \u003ccode\u003einvoke_without_command=True\u003c/code\u003e marks its subcommand as\noptional in the usage help, showing \u003ccode\u003e[COMMAND]\u003c/code\u003e instead of \u003ccode\u003eCOMMAND\u003c/code\u003e.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3059\"\u003e#3059\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3507\"\u003e#3507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e flushes after each write, so passing a generator streams\noutput to the pager incrementally instead of staying hidden until the pipe\nbuffer fills. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3242\"\u003e#3242\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/2542\"\u003e#2542\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3534\"\u003e#3534\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eecho_via_pager\u003c/code\u003e and \u003ccode\u003eget_pager_file\u003c/code\u003e no longer close a borrowed stdout\nstream when no external pager runs, completing the partial\n\u003ccode\u003eI/O operation on closed file\u003c/code\u003e fix from \u003ca href=\"https://redirect.github.com/pallets/click/issues/3482\"\u003e#3482\u003c/a\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3533\"\u003e#3533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix CLI usage symopsis for optional arguments producing double square brackets\n\u003ccode\u003e[[a|b|c]]...\u003c/code\u003e whose type already brackets their metavar. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e{func}\u003ccode\u003eversion_option\u003c/code\u003e resolves a \u003ccode\u003epackage_name\u003c/code\u003e that does not match an\ninstalled distribution as an import (top-level module) name via\n{func}\u003ccode\u003eimportlib.metadata.packages_distributions\u003c/code\u003e. Packages whose\ntop-level module name differs from their distribution name (\u003ccode\u003ePIL\u003c/code\u003e vs\n\u003ccode\u003ePillow\u003c/code\u003e, \u003ccode\u003ejwt\u003c/code\u003e vs \u003ccode\u003ePyJWT\u003c/code\u003e) no longer raise \u003ccode\u003eRuntimeError\u003c/code\u003e out of the\nbox. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2331\"\u003e#2331\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/1884\"\u003e#1884\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3125\"\u003e#3125\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.1\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.1/\"\u003ehttps://pypi.org/project/click/8.4.1/\u003c/a\u003e\nChanges: \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-1\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-1\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/click/milestone/32\"\u003ehttps://github.com/pallets/click/milestone/32\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type conversion again. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3458\"\u003e#3458\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3484\"\u003e#3484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3277\"\u003e#3277\u003c/a\u003e # 3466\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion result. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3015\"\u003e#3015\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3487\"\u003e#3487\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3449\"\u003e#3449\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our [Version Support Policy][version] on our website.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.md\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.2\u003c/h2\u003e\n\u003cp\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\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\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b2e30a175449cfda909ee4fbf4a29a6a071cad53\"\u003e\u003ccode\u003eb2e30a1\u003c/code\u003e\u003c/a\u003e Release version 8.4.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/7a16b20e8a8a9bb57c7b4f6f15f60f6597478a49\"\u003e\u003ccode\u003e7a16b20\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when module differs from distribution name (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3582\"\u003e#3582\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/bec59289d8cf9b9b4010642b2fee483e5f8eeefc\"\u003e\u003ccode\u003ebec5928\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003epackage_name\u003c/code\u003e resolution when top-level module differs from distribution...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/916883afad450c0c9bbc4212817900949131adbd\"\u003e\u003ccode\u003e916883a\u003c/code\u003e\u003c/a\u003e Fix tests to not rely on \u003ccode\u003e-Wdefault\u003c/code\u003e option (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3591\"\u003e#3591\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/09195f6a92972c4e1bbb5493686456e6ba624520\"\u003e\u003ccode\u003e09195f6\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3578\"\u003e#3578\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1557e265222c431b1e4d6c4dd6754006ed10dc02\"\u003e\u003ccode\u003e1557e26\u003c/code\u003e\u003c/a\u003e Check for warning exception with idiomatic context manager\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/d9ff13369ac78d9acff693faa79f26badd566ab3\"\u003e\u003ccode\u003ed9ff133\u003c/code\u003e\u003c/a\u003e Static typing improvements in \u003ccode\u003eclick.shell_completion\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3460\"\u003e#3460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/762c97eef7c1b3779678992f26a553a2a8c80793\"\u003e\u003ccode\u003e762c97e\u003c/code\u003e\u003c/a\u003e Fix double-bracketing of choices in synopsis\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/8929d392781c8113bc569f388c15c47b94f86581\"\u003e\u003ccode\u003e8929d39\u003c/code\u003e\u003c/a\u003e Convert changes to markdown. (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3559\"\u003e#3559\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/237be507dbe3e653f6b41b3ea53266805534e8cd\"\u003e\u003ccode\u003e237be50\u003c/code\u003e\u003c/a\u003e Move changes headings down a level.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.1...8.4.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `docstring-parser` from 0.17.0 to 0.18.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/rr-/docstring_parser/blob/master/CHANGELOG.md\"\u003edocstring-parser's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e0.18 (2026-04-14)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGeneral: Allow \u003ccode\u003eparse()\u003c/code\u003e to work with missing \u003ccode\u003e__doc__\u003c/code\u003e (thanks to \u003ca href=\"https://github.com/jamesbraza\"\u003e\u003ccode\u003e@​jamesbraza\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Officially support Python 3.14 (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Exclude \u003ccode\u003edocstring_parser.tests\u003c/code\u003e from built wheels (thanks to \u003ca href=\"https://github.com/gvalkov\"\u003e\u003ccode\u003e@​gvalkov\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEpydoc: Add missing attribute parsing, which includes the \u0026quot;\u003ca href=\"https://github.com/ivar\"\u003e\u003ccode\u003e@​ivar\u003c/code\u003e\u003c/a\u003e\u0026quot;, \u0026quot;\u003ca href=\"https://github.com/cvar\"\u003e\u003ccode\u003e@​cvar\u003c/code\u003e\u003c/a\u003e\u0026quot; and \u0026quot;\u003ca href=\"https://github.com/var\"\u003e\u003ccode\u003e@​var\u003c/code\u003e\u003c/a\u003e\u0026quot; syntax (thanks to \u003ca href=\"https://github.com/Masara\"\u003e\u003ccode\u003e@​Masara\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eNumpydoc: Add support for defaults in type declarations and improve compose behavior (thanks to \u003ca href=\"https://github.com/jwlodek\"\u003e\u003ccode\u003e@​jwlodek\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.17 (2025-07-21)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGeneral: Replace poetry with hatchling (thanks to \u003ca href=\"https://github.com/LecrisUT\"\u003e\u003ccode\u003e@​LecrisUT\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Drop support for Python 3.6 and 3.7 (thanks to \u003ca href=\"https://github.com/LecrisUT\"\u003e\u003ccode\u003e@​LecrisUT\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Officially support Python 3.13 (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: Publish packages to PyPI with digital attestations (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGoogle: Fix multi-line parameter definitions (thanks to \u003ca href=\"https://github.com/coolbeevip\"\u003e\u003ccode\u003e@​coolbeevip\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAttrdoc: Remove use of deprecated ast classes (thanks to \u003ca href=\"https://github.com/fedepell\"\u003e\u003ccode\u003e@​fedepell\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.16 (2024-03-15)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eParser: add a new property, \u003ccode\u003edescription\u003c/code\u003e, that combines short and long\ndescriptions into a single string (thanks to \u003ca href=\"https://github.com/pR0Ps\"\u003e\u003ccode\u003e@​pR0Ps\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eGeneral: support Python 3.12 (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.15 (2022-09-05)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eParser: add a new function, \u003ccode\u003eparse_from_object\u003c/code\u003e, that supports scattered\ndocstrings (thanks to \u003ca href=\"https://github.com/mauvilsa\"\u003e\u003ccode\u003e@​mauvilsa\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.14.1 (2022-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eParser: fix autodetection (regression from 0.14)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.14 (2022-04-25)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eNumpydoc: Improved support for Example / Examples section\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.13 (2021-11-17)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGoogle: Added support for Example / Examples section\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.12 (2021-10-15)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGeneral: Added support for lone \u003ccode\u003e:rtype:\u003c/code\u003e meta information (thanks to \u003ca href=\"https://github.com/abergou\"\u003e\u003ccode\u003e@​abergou\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e0.11 (2021-09-30)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eGeneral: Started tracking changes\u003c/li\u003e\n\u003cli\u003eGeneral: Added ability to combine function docstrings (thanks to \u003ca href=\"https://gi...\n\n_Description has been truncated_","html_url":"https://github.com/Aman12x/DataPilot/pull/16","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aman12x%2FDataPilot/issues/16","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/16/packages"}},{"old_version":"2026.5.20","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-06-26T22:17:48.000Z","version_change":"2026.5.20 → 2026.6.17","issue":{"uuid":"4755449956","node_id":"PR_kwDOS7Plt87rJwvR","number":10,"state":"closed","title":"Bump the dependencies group across 1 directory with 22 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-26T22:29:34.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-26T22:17:48.000Z","updated_at":"2026-06-26T22:29:36.000Z","time_to_close":706,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"dependencies","update_count":22,"packages":[{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"django","old_version":"5.2.15","new_version":"6.0.6","repository_url":"https://github.com/django/django"},{"name":"prek","old_version":"0.4.4","new_version":"0.4.5","repository_url":"https://github.com/j178/prek"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"ty","old_version":"0.0.1a21","new_version":"0.0.51","repository_url":"https://github.com/astral-sh/ty"},{"name":"boto3","old_version":"1.43.23","new_version":"1.43.34","repository_url":"https://github.com/boto/boto3"},{"name":"botocore","old_version":"1.43.23","new_version":"1.43.34","repository_url":"https://github.com/boto/botocore"},{"name":"django-allauth","old_version":"65.14.3","new_version":"65.18.0","repository_url":"https://github.com/sponsors/pennersr"},{"name":"django-js-asset","old_version":"3.1.2","new_version":"4.0.1","repository_url":"https://github.com/feincms/django-js-asset"},{"name":"django-money","old_version":"3.6.0","new_version":"3.6.1","repository_url":"https://github.com/django-money/django-money"},{"name":"django-otp","old_version":"1.3.0","new_version":"1.7.0","repository_url":"https://github.com/django-otp/django-otp"},{"name":"grpcio","old_version":"1.81.0","new_version":"1.81.1","repository_url":"https://github.com/grpc/grpc"},{"name":"icalendar","old_version":"7.1.2","new_version":"7.1.3","repository_url":"https://github.com/collective/icalendar"},{"name":"protobuf","old_version":"6.33.6","new_version":"7.35.1","repository_url":"https://github.com/protocolbuffers/protobuf"},{"name":"pypdf","old_version":"6.13.0","new_version":"6.13.3","repository_url":"https://github.com/py-pdf/pypdf"},{"name":"s3transfer","old_version":"0.18.0","new_version":"0.19.0","repository_url":"https://github.com/boto/s3transfer"},{"name":"sentry-sdk","old_version":"2.61.1","new_version":"2.63.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"structlog","old_version":"25.5.0","new_version":"26.1.0","repository_url":"https://github.com/hynek/structlog"},{"name":"tqdm","old_version":"4.68.1","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"},{"name":"wcwidth","old_version":"0.7.0","new_version":"0.8.1","repository_url":"https://github.com/jquast/wcwidth"},{"name":"wrapt","old_version":"1.17.3","new_version":"2.2.1","repository_url":"https://github.com/GrahamDumpleton/wrapt"},{"name":"zopfli","old_version":"0.4.2","new_version":"0.4.3","repository_url":"https://github.com/fonttools/py-zopfli"}],"path":null,"ecosystem":"pip"},"body":"Bumps the dependencies group with 22 updates in the /src/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.6.17` |\n| [django](https://github.com/django/django) | `5.2.15` | `6.0.6` |\n| [prek](https://github.com/j178/prek) | `0.4.4` | `0.4.5` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.3` | `9.1.1` |\n| [ty](https://github.com/astral-sh/ty) | `0.0.1a21` | `0.0.51` |\n| [boto3](https://github.com/boto/boto3) | `1.43.23` | `1.43.34` |\n| [botocore](https://github.com/boto/botocore) | `1.43.23` | `1.43.34` |\n| [django-allauth](https://github.com/sponsors/pennersr) | `65.14.3` | `65.18.0` |\n| [django-js-asset](https://github.com/feincms/django-js-asset) | `3.1.2` | `4.0.1` |\n| [django-money](https://github.com/django-money/django-money) | `3.6.0` | `3.6.1` |\n| [django-otp](https://github.com/django-otp/django-otp) | `1.3.0` | `1.7.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.81.0` | `1.81.1` |\n| [icalendar](https://github.com/collective/icalendar) | `7.1.2` | `7.1.3` |\n| [protobuf](https://github.com/protocolbuffers/protobuf) | `6.33.6` | `7.35.1` |\n| [pypdf](https://github.com/py-pdf/pypdf) | `6.13.0` | `6.13.3` |\n| [s3transfer](https://github.com/boto/s3transfer) | `0.18.0` | `0.19.0` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.61.1` | `2.63.0` |\n| [structlog](https://github.com/hynek/structlog) | `25.5.0` | `26.1.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.68.1` | `4.68.3` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.7.0` | `0.8.1` |\n| [wrapt](https://github.com/GrahamDumpleton/wrapt) | `1.17.3` | `2.2.1` |\n| [zopfli](https://github.com/fonttools/py-zopfli) | `0.4.2` | `0.4.3` |\n\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 `django` from 5.2.15 to 6.0.6\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/ee93f65169c280c9ab3d2ce103dd478c96d05065\"\u003e\u003ccode\u003eee93f65\u003c/code\u003e\u003c/a\u003e [6.0.x] Bumped version for 6.0.6 release.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/1721035a72624aad7b38dd19b14013efd94b24b8\"\u003e\u003ccode\u003e1721035\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-48587 -- Ignored whitespace padding when checking Vary...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/664652f1a2dd80d8a4cd491b4313cad915ae6669\"\u003e\u003ccode\u003e664652f\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-35193 -- Varied on Authorization when caching non-publ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/b4330259ffbe1a031ed14daab1f35697460f10f2\"\u003e\u003ccode\u003eb433025\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-8404 -- Used Cache-Control directives case-insensitive...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/625a670c467aa3118c0f8ae1e0df14dbebb3bf68\"\u003e\u003ccode\u003e625a670\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-7666 -- Delayed setting SMTP connection until fully co...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c807d9c398022d23cb27518fa6ecaf343efb30cf\"\u003e\u003ccode\u003ec807d9c\u003c/code\u003e\u003c/a\u003e [6.0.x] Fixed CVE-2026-6873 -- Prevented signed cookie salt namespace collisi...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/98a75e39cfc63fa72162027b5678943b78a4469b\"\u003e\u003ccode\u003e98a75e3\u003c/code\u003e\u003c/a\u003e [6.0.x] Included commit hash in checksum file when building artifacts for rel...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/dd895d6268f1dd544a565a321cb4527ca3ca1173\"\u003e\u003ccode\u003edd895d6\u003c/code\u003e\u003c/a\u003e [6.0.x] Updated translations from Transifex.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/49ca2db7f4d4ca4a7735a40610d59c84a039eb32\"\u003e\u003ccode\u003e49ca2db\u003c/code\u003e\u003c/a\u003e [6.0.x] Updated links to severity levels in release notes.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django/django/commit/c9f32a2301a9aa897f967fd8077496455ebf5d77\"\u003e\u003ccode\u003ec9f32a2\u003c/code\u003e\u003c/a\u003e [6.0.x] Added stub release notes and release date for 6.0.6 and 5.2.15.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django/django/compare/5.2.15...6.0.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `prek` from 0.4.4 to 0.4.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/j178/prek/releases\"\u003eprek's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.4.5\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-15.\u003c/p\u003e\n\u003ch3\u003e✨Highlights\u003c/h3\u003e\n\u003cp\u003e0.4.5 completes \u003ccode\u003eprek\u003c/code\u003e's pre-commit language coverage. With R, Conda, Perl,\nand coursier now supported, \u003ccode\u003eprek\u003c/code\u003e supports every language available in\npre-commit, plus \u003ccode\u003eprek\u003c/code\u003e-only modern languages such as Bun and Deno.\u003c/p\u003e\n\u003cp\u003eThis is full feature parity with pre-commit. The last major compatibility gap\nis closed, and \u003ccode\u003eprek\u003c/code\u003e is now on the path to 1.0.\u003c/p\u003e\n\u003ch3\u003e💚 Sponsorship\u003c/h3\u003e\n\u003cp\u003eIf \u003ccode\u003eprek\u003c/code\u003e saves time for you or your team, please consider sponsoring the\nproject on \u003ca href=\"https://github.com/sponsors/j178\"\u003eGitHub Sponsors\u003c/a\u003e. It helps keep\nnew features, performance work, and maintenance moving.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePerl\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2201\"\u003e#2201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eR\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2206\"\u003e#2206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eConda\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2203\"\u003e#2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecoursier\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2194\"\u003e#2194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd group filters to list (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2152\"\u003e#2152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove legacy repo path support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2150\"\u003e#2150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip cloning fully filtered remote repos (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2151\"\u003e#2151\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid building JSON trees in syntax hooks (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2156\"\u003e#2156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eScan mixed line endings without line vector (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2160\"\u003e#2160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip file scan for always-run no-filename hooks (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2155\"\u003e#2155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse fixed buffer for EOF scan (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2163\"\u003e#2163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse fixed buffer for private key scan (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2164\"\u003e#2164\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix pretty-format-json CRLF handling (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2210\"\u003e#2210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle missing blobs in diff snapshots (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2211\"\u003e#2211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIgnore coursier channel from working repo (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2202\"\u003e#2202\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/j178\"\u003e\u003ccode\u003e@​j178\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall prek 0.4.5\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/j178/prek/blob/master/CHANGELOG.md\"\u003eprek's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.4.5\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-15.\u003c/p\u003e\n\u003ch3\u003e✨Highlights\u003c/h3\u003e\n\u003cp\u003e0.4.5 completes \u003ccode\u003eprek\u003c/code\u003e's pre-commit language coverage. With R, Conda, Perl,\nand coursier now supported, \u003ccode\u003eprek\u003c/code\u003e supports every language available in\npre-commit, plus \u003ccode\u003eprek\u003c/code\u003e-only modern languages such as Bun and Deno.\u003c/p\u003e\n\u003cp\u003eThis is full feature parity with pre-commit. The last major compatibility gap\nis closed, and \u003ccode\u003eprek\u003c/code\u003e is now on the path to 1.0.\u003c/p\u003e\n\u003ch3\u003e💚 Sponsorship\u003c/h3\u003e\n\u003cp\u003eIf \u003ccode\u003eprek\u003c/code\u003e saves time for you or your team, please consider sponsoring the\nproject on \u003ca href=\"https://github.com/sponsors/j178\"\u003eGitHub Sponsors\u003c/a\u003e. It helps keep\nnew features, performance work, and maintenance moving.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003ePerl\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2201\"\u003e#2201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eR\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2206\"\u003e#2206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eConda\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2203\"\u003e#2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecoursier\u003c/code\u003e language support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2194\"\u003e#2194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd group filters to list (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2152\"\u003e#2152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove legacy repo path support (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2150\"\u003e#2150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip cloning fully filtered remote repos (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2151\"\u003e#2151\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid building JSON trees in syntax hooks (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2156\"\u003e#2156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eScan mixed line endings without line vector (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2160\"\u003e#2160\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip file scan for always-run no-filename hooks (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2155\"\u003e#2155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse fixed buffer for EOF scan (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2163\"\u003e#2163\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse fixed buffer for private key scan (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2164\"\u003e#2164\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix pretty-format-json CRLF handling (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2210\"\u003e#2210\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eHandle missing blobs in diff snapshots (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2211\"\u003e#2211\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIgnore coursier channel from working repo (\u003ca href=\"https://redirect.github.com/j178/prek/pull/2202\"\u003e#2202\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/j178\"\u003e\u003ccode\u003e@​j178\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/j178/prek/commit/bb3108283fd4aab0d9eb59f23098e0c05a96cdbe\"\u003e\u003ccode\u003ebb31082\u003c/code\u003e\u003c/a\u003e Update README.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/fa4e2dc060eccac3c2521ec7bf4af1272c5d6205\"\u003e\u003ccode\u003efa4e2dc\u003c/code\u003e\u003c/a\u003e Bump version to 0.4.5 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2221\"\u003e#2221\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/e9336fa724b8a99b3a21fd60eb0849cd731153ef\"\u003e\u003ccode\u003ee9336fa\u003c/code\u003e\u003c/a\u003e Add R language support (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2206\"\u003e#2206\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/97a5a15701d3691287e4f969a2a2f421d1501a46\"\u003e\u003ccode\u003e97a5a15\u003c/code\u003e\u003c/a\u003e Update Rust crate which to v8.0.3 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2219\"\u003e#2219\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/20a519aa2aa4add7e70dfbb2ff743cd1f35e25f3\"\u003e\u003ccode\u003e20a519a\u003c/code\u003e\u003c/a\u003e Update Rust crate ignore to v0.4.26 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2218\"\u003e#2218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/88f0e2bd8a7d02be7fb19fcd17e1e8db79b8b0bc\"\u003e\u003ccode\u003e88f0e2b\u003c/code\u003e\u003c/a\u003e Update dependency uv to v0.11.19 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2214\"\u003e#2214\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/7bd43000679b33e2b947f453436237dae062af70\"\u003e\u003ccode\u003e7bd4300\u003c/code\u003e\u003c/a\u003e Update GitHub Actions to v7 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2220\"\u003e#2220\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/48ed5cc2838066d71278dd887dee595c32085be2\"\u003e\u003ccode\u003e48ed5cc\u003c/code\u003e\u003c/a\u003e Update Rust crate async_zip to 0.0.18 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2217\"\u003e#2217\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/257e98a429e96f89a4d965ad28568cba77ca33c2\"\u003e\u003ccode\u003e257e98a\u003c/code\u003e\u003c/a\u003e Update pre-commit to v1.47.2 (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2216\"\u003e#2216\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/j178/prek/commit/0c0460241a13b9ac519e1abd3a0a8a3ad60d4d2f\"\u003e\u003ccode\u003e0c04602\u003c/code\u003e\u003c/a\u003e Update GitHub Actions (\u003ca href=\"https://redirect.github.com/j178/prek/issues/2215\"\u003e#2215\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/j178/prek/compare/v0.4.4...v0.4.5\"\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 `ty` from 0.0.1a21 to 0.0.51\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/ty/releases\"\u003ety's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.51\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix bound TypeVar default cycle recovery (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26124\"\u003e#26124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eAnnotated[Any, ...]\u003c/code\u003e as a class base (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26133\"\u003e#26133\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLSP server\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSuggest keyword-only arguments between variadic parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26134\"\u003e#26134\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCore type checking\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid assuming classes with \u003ccode\u003eAny\u003c/code\u003e or \u003ccode\u003eUnknown\u003c/code\u003e bases are descriptors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26120\"\u003e#26120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInfer simpler types in complex lambda cycles (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26137\"\u003e#26137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve exact class objects during identity narrowing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26117\"\u003e#26117\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDiagnostics\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve unpacking diagnostics for nested assignment targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26121\"\u003e#26121\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompact indexed AST node storage (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25998\"\u003e#25998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDiscard dead DNF branches in intersection building (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26144\"\u003e#26144\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove broken gradual guarantee link (\u003ca href=\"https://redirect.github.com/astral-sh/ty/pull/3806\"\u003e#3806\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/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ibraheemdev\"\u003e\u003ccode\u003e@​ibraheemdev\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall ty 0.0.51\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/ty/releases/download/0.0.51/ty-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\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/astral-sh/ty/blob/main/CHANGELOG.md\"\u003ety's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.51\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix bound TypeVar default cycle recovery (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26124\"\u003e#26124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003eAnnotated[Any, ...]\u003c/code\u003e as a class base (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26133\"\u003e#26133\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eLSP server\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSuggest keyword-only arguments between variadic parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26134\"\u003e#26134\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eCore type checking\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid assuming classes with \u003ccode\u003eAny\u003c/code\u003e or \u003ccode\u003eUnknown\u003c/code\u003e bases are descriptors (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26120\"\u003e#26120\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInfer simpler types in complex lambda cycles (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26137\"\u003e#26137\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve exact class objects during identity narrowing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26117\"\u003e#26117\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDiagnostics\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve unpacking diagnostics for nested assignment targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26121\"\u003e#26121\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCompact indexed AST node storage (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25998\"\u003e#25998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDiscard dead DNF branches in intersection building (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26144\"\u003e#26144\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove broken gradual guarantee link (\u003ca href=\"https://redirect.github.com/astral-sh/ty/pull/3806\"\u003e#3806\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/charliermarsh\"\u003e\u003ccode\u003e@​charliermarsh\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ibraheemdev\"\u003e\u003ccode\u003e@​ibraheemdev\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/MichaReiser\"\u003e\u003ccode\u003e@​MichaReiser\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sharkdp\"\u003e\u003ccode\u003e@​sharkdp\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.50\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-17.\u003c/p\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid cross-TypeVar leakage in generic inference (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26099\"\u003e#26099\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix panic from oscillating collection-use constraints (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26031\"\u003e#26031\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve type variables in fixed tuple aliases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26041\"\u003e#26041\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRespect ParamSpec binding contexts (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25993\"\u003e#25993\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/b5ef61c13dd0869e403fe3c9d6b7a458f94537a2\"\u003e\u003ccode\u003eb5ef61c\u003c/code\u003e\u003c/a\u003e Bump version to 0.0.51 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3811\"\u003e#3811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/0749deed7656be89b68af39191fe05b2d9d3b2b7\"\u003e\u003ccode\u003e0749dee\u003c/code\u003e\u003c/a\u003e Remove broken gradual guarantee link (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3806\"\u003e#3806\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/556d22cedcefc93cadec8f9b46defa288cc57a3c\"\u003e\u003ccode\u003e556d22c\u003c/code\u003e\u003c/a\u003e fix typo (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3805\"\u003e#3805\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/ad35fdff18d84883120c14e3d2cead8903cf8507\"\u003e\u003ccode\u003ead35fdf\u003c/code\u003e\u003c/a\u003e Improve the \u0026quot;Does ty have a strict mode?\u0026quot; FAQ (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3798\"\u003e#3798\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/9eb8419ae64191539d6ae19f5d4cccdf47be5e5c\"\u003e\u003ccode\u003e9eb8419\u003c/code\u003e\u003c/a\u003e Expand mypy and Pyright rule mapping (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3783\"\u003e#3783\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/8c5c8c10dc9796520b4ac7eff64d932ab631b437\"\u003e\u003ccode\u003e8c5c8c1\u003c/code\u003e\u003c/a\u003e Bump version to 0.0.50 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3800\"\u003e#3800\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/42a9002aa032cc85dc44c25efe4d8b3a29bfd914\"\u003e\u003ccode\u003e42a9002\u003c/code\u003e\u003c/a\u003e Update benchmarks for ty 0.0.50 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3799\"\u003e#3799\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/f515f25eeb6691e00761228dc00bc0de6de1780f\"\u003e\u003ccode\u003ef515f25\u003c/code\u003e\u003c/a\u003e Pass PyPI version to ty-pre-commit when triggering a release in that repo (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3\"\u003e#3\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/b669da87d3ef53dd6bad8fb7dd7e950d3ec3e3f4\"\u003e\u003ccode\u003eb669da8\u003c/code\u003e\u003c/a\u003e Bump version to 0.0.49 (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3749\"\u003e#3749\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ty/commit/79f0f513f71ed68ba81f297cae97f4a578669d61\"\u003e\u003ccode\u003e79f0f51\u003c/code\u003e\u003c/a\u003e Fixups to new AGENTS.md file (\u003ca href=\"https://redirect.github.com/astral-sh/ty/issues/3741\"\u003e#3741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ty/compare/0.0.1-alpha.21...0.0.51\"\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.23 to 1.43.34\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1820b7d9f7558b191720bf75fb45f2c52bb6917d\"\u003e\u003ccode\u003e1820b7d\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.34'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/2178e7a51bf37fae9f093543e265a5b5a5093f3b\"\u003e\u003ccode\u003e2178e7a\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.34\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/797f30df0d9e5f0f0110f87b06e3d35081a87feb\"\u003e\u003ccode\u003e797f30d\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/325a0591f60526c83cef87a4f4316baae01ce787\"\u003e\u003ccode\u003e325a059\u003c/code\u003e\u003c/a\u003e Remove DocumentModifiedShape and re-export it from botocore (\u003ca href=\"https://redirect.github.com/boto/boto3/issues/4795\"\u003e#4795\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/44bfb9a45ba93c9841b83670da17f52243b89b66\"\u003e\u003ccode\u003e44bfb9a\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.33'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/447ab8f8a6b9d0d743e9f1d38283d57ffd9e8d53\"\u003e\u003ccode\u003e447ab8f\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.33' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/1a41f9c58335a0ece89a9f0f2d43c141ff4ae095\"\u003e\u003ccode\u003e1a41f9c\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.33\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/3a2819d48ea7fe0b1c29a1daab69762a819a70be\"\u003e\u003ccode\u003e3a2819d\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/22ffece9223b6e342ce586a9ceb717050a0fd097\"\u003e\u003ccode\u003e22ffece\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/4802\"\u003e#4802\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/boto3/commit/19645b7bc9fc471787857ded454ea0636e89955e\"\u003e\u003ccode\u003e19645b7\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.32'\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/boto3/compare/1.43.23...1.43.34\"\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.23 to 1.43.34\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/67d724c0e1b10da9709b2df815b803ab202c31cd\"\u003e\u003ccode\u003e67d724c\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.34'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/8279c40bc01efa45591e18179b40fb149926201f\"\u003e\u003ccode\u003e8279c40\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.34\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/42c8aee51b5a4acfa9544d0ecfe63d5013318784\"\u003e\u003ccode\u003e42c8aee\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/f1f68269807302b0b74a0ecde3afb406138829e5\"\u003e\u003ccode\u003ef1f6826\u003c/code\u003e\u003c/a\u003e Merge customizations for Glue\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/9634887a7a22d7cb59b8032e9a3fc55b80d6a198\"\u003e\u003ccode\u003e9634887\u003c/code\u003e\u003c/a\u003e Document policyDocumentShape for iam operations as a dict (\u003ca href=\"https://redirect.github.com/boto/botocore/issues/3721\"\u003e#3721\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/1ac5768f12eb16055f141fb9b9fca92f64567731\"\u003e\u003ccode\u003e1ac5768\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.33'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/dbfa9d0d2bdad5476556e632d96126a0b2a0e4ce\"\u003e\u003ccode\u003edbfa9d0\u003c/code\u003e\u003c/a\u003e Merge branch 'release-1.43.33' into develop\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/911ee327ee133fd63aeaa25aaaa63ef4f452840a\"\u003e\u003ccode\u003e911ee32\u003c/code\u003e\u003c/a\u003e Bumping version to 1.43.33\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/77e35af7c72dfebbf2b4850181b594a5510e7a89\"\u003e\u003ccode\u003e77e35af\u003c/code\u003e\u003c/a\u003e Update to latest models\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/boto/botocore/commit/42d47f67015c92f7f879e0baeae8e7c9084504e5\"\u003e\u003ccode\u003e42d47f6\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/3730\"\u003e#3730\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/boto/botocore/compare/1.43.23...1.43.34\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-allauth` from 65.14.3 to 65.18.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sponsors/pennersr/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-js-asset` from 3.1.2 to 4.0.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/feincms/django-js-asset/blob/main/CHANGELOG.rst\"\u003edjango-js-asset's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e.. _changelog:\u003c/p\u003e\n\u003ch1\u003eChange log\u003c/h1\u003e\n\u003cp\u003eNext version\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Fixed ``js_asset.Media`` crashing with an ``AttributeError`` when rendering an\n  asset that only implements Django's plain ``__html__`` contract (neither a\n  ``MediaAsset`` nor one of our ``ImportMap``/``JSON`` types). Such assets now\n  fall back to ``__html__()`` exactly like ``django.forms.Media`` does; the\n  nonce cannot be threaded into an opaque ``__html__`` asset, same as with stock\n  Django.\n- Corrected the docs around Django 6.1 support. Thanks James Bligh!\n- Finally set up a documentation site at Read the Docs for django-js-asset.\n\u003cp\u003e4.0 (2026-06-11)\u003cbr /\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eThis is a major release. Most code keeps working unchanged and the rendered\nHTML is the same, but \u003cstrong\u003eif you use import maps the upgrade is not automatic\u003c/strong\u003e --\nsee the import-map note at the end.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003ejs_asset.Media\u003c/code\u003e, a \u003ccode\u003edjango.forms.Media\u003c/code\u003e subclass with two extra\nabilities. First, it merges every embedded \u003ccode\u003eImportMap\u003c/code\u003e into a single\n\u003ccode\u003e\u0026lt;script type=\u0026quot;importmap\u0026quot;\u0026gt;\u003c/code\u003e rendered before any other script -- this\nreplaces the old global \u003ccode\u003eimportmap\u003c/code\u003e object and works no matter how many\nmedia objects Django combines. Second, it applies a request-scoped CSP nonce\nto the tags it renders. It implements \u003ccode\u003e__add__\u003c/code\u003e \u003cstrong\u003eand\u003c/strong\u003e \u003ccode\u003e__radd__\u003c/code\u003e, so it\nkeeps its type -- and its nonce -- when combined with a plain \u003ccode\u003eforms.Media\u003c/code\u003e\nfrom either side (e.g. while Django collects form and widget media). The nonce\ncan be passed to the constructor (\u003ccode\u003enonce=\u003c/code\u003e), copied onto a clone with\n\u003ccode\u003ewith_nonce()\u003c/code\u003e, or passed to \u003ccode\u003erender(nonce=...)\u003c/code\u003e; \u003ccode\u003erender()\u003c/code\u003e also accepts\n\u003ccode\u003eattrs={\u0026quot;nonce\u0026quot;: ...}\u003c/code\u003e so it plugs straight into Django 6.2's\n\u003ccode\u003e{% csp_nonce_attr %}\u003c/code\u003e tag. \u003ccode\u003eMedia.from_media()\u003c/code\u003e wraps an existing\n\u003ccode\u003eforms.Media\u003c/code\u003e instance (e.g. \u003ccode\u003eform.media\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eJS\u003c/code\u003e and \u003ccode\u003eCSS\u003c/code\u003e now \u003cem\u003eproduce\u003c/em\u003e Django's own \u003ccode\u003eScript\u003c/code\u003e and \u003ccode\u003eStylesheet\u003c/code\u003e\nobjects (backported via \u003ccode\u003ejs_asset._compat\u003c/code\u003e on Django versions that lack\nthem) instead of being standalone dataclasses. They therefore share merge\nbuckets with native Django assets and with bare path strings, so the same\nfile is no longer rendered more than once when \u003ccode\u003ejs_asset\u003c/code\u003e assets, plain\nstrings and Django's auto-wrapped assets meet in \u003ccode\u003eforms.Media.merge()\u003c/code\u003e.\n\u003ccode\u003eisinstance(x, JS)\u003c/code\u003e / \u003ccode\u003eisinstance(x, CSS)\u003c/code\u003e keep working (via a metaclass).\nInline CSS (\u003ccode\u003eCSS(src, inline=True)\u003c/code\u003e) is rendered by a small dedicated\n\u003ccode\u003eInlineStyle\u003c/code\u003e asset. Rendered output is unchanged.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eScript\u003c/code\u003e, \u003ccode\u003eStylesheet\u003c/code\u003e, \u003ccode\u003eMediaAsset\u003c/code\u003e and \u003ccode\u003eInlineStyle\u003c/code\u003e can now be\nimported from \u003ccode\u003ejs_asset\u003c/code\u003e -- prefer these in \u003ccode\u003eisinstance\u003c/code\u003e checks over\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/7c024a3ef83a1c2951f2ab3925e85b81ebbc8bc0\"\u003e\u003ccode\u003e7c024a3\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/59aa7e529ef7052c3c1710e8a673c14c852334f6\"\u003e\u003ccode\u003e59aa7e5\u003c/code\u003e\u003c/a\u003e Fix \u003cstrong\u003ehtml\u003c/strong\u003e objects in Media\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b3c515c793185d96d43124a8239267a535bdd18f\"\u003e\u003ccode\u003eb3c515c\u003c/code\u003e\u003c/a\u003e django-js-asset 4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/8a343389d9500999bd3397a1d1c44cb5ee709a00\"\u003e\u003ccode\u003e8a34338\u003c/code\u003e\u003c/a\u003e Address review comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/b7d05eb0f4d7548219b06eb4057fe908c2e85a23\"\u003e\u003ccode\u003eb7d05eb\u003c/code\u003e\u003c/a\u003e Remove the global importmap and update the guidance accordingly\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/3213b9bd209527e989c0fb8f552e7941407460cc\"\u003e\u003ccode\u003e3213b9b\u003c/code\u003e\u003c/a\u003e Increase interoperability with Django's own object-based media assets\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/cfe3b529f22bd8dcd1abf193aa4af0f1e96681be\"\u003e\u003ccode\u003ecfe3b52\u003c/code\u003e\u003c/a\u003e Add a Media subclass with import-map merging and CSP nonce support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/6708307bd5e1d5cc18cb58da63e2c6ace07e653c\"\u003e\u003ccode\u003e6708307\u003c/code\u003e\u003c/a\u003e dj62 does not exist yet as a release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/9961d4871605432a9923d2a844d51d9efca47c73\"\u003e\u003ccode\u003e9961d48\u003c/code\u003e\u003c/a\u003e Run tests with newer Django and Python versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/feincms/django-js-asset/commit/f77abf57e6754612793c9976305f704f61dfceff\"\u003e\u003ccode\u003ef77abf5\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 2 updates (\u003ca href=\"https://redirect.github.com/feincms/django-js-asset/issues/20\"\u003e#20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/feincms/django-js-asset/compare/3.1.2...4.0.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-money` from 3.6.0 to 3.6.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-money/django-money/releases\"\u003edjango-money's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.6.1\u003c/h2\u003e\n\u003cp\u003eChangelog: \u003ca href=\"https://django-money.readthedocs.io/en/latest/changes.html\"\u003ehttps://django-money.readthedocs.io/en/latest/changes.html\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/django-money/django-money/blob/main/docs/changes.rst\"\u003edjango-money's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003e3.6.1\u003c/code\u003e_ - 2026-06-07\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAdded\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eUniRateBackend\u003c/code\u003e exchange-rate backend for \u003ccode\u003eUniRateAPI \u0026lt;https://unirateapi.com\u0026gt;\u003c/code\u003e_. Configure via \u003ccode\u003eEXCHANGE_BACKEND = \u0026quot;djmoney.contrib.exchange.backends.UniRateBackend\u0026quot;\u003c/code\u003e and set \u003ccode\u003eUNIRATE_ACCESS_KEY\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanged\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpsert rates instead of deleting and recreating them :github-issue:\u003ccode\u003e818\u003c/code\u003e (:github-user:\u003ccode\u003e2tunnels\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate README to reflect currently supported Python (3.10–3.13) and Django (4.2–5.2) versions. :github-issue:\u003ccode\u003e820\u003c/code\u003e (:github-user:\u003ccode\u003esmhtbtb\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ccode\u003e3.6\u003c/code\u003e_ - 2026-01-27\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAdded\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for callable \u003ccode\u003edefault\u003c/code\u003e and \u003ccode\u003ecurrency_default\u003c/code\u003e, and \u003ccode\u003ecurrency_choices\u003c/code\u003e :github-issue:\u003ccode\u003e683\u003c/code\u003e (:github-user:\u003ccode\u003ebenjaoming\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ebackend\u003c/code\u003e kwarg to \u003ccode\u003econvert_money\u003c/code\u003e function :github-issue:\u003ccode\u003e787\u003c/code\u003e (:github-user:\u003ccode\u003eheckad\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eAdd getting a limit value from a callable :github-issue:\u003ccode\u003e810\u003c/code\u003e (:github-user:\u003ccode\u003eheckad\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFixed\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe auto-generated hidden input field that tracks initial data in formsets with MoneyField should now work :github-issue:\u003ccode\u003e803\u003c/code\u003e (:github-user:\u003ccode\u003ebenjaoming\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eChanged\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate to pyproject.toml and uv :github-issue:\u003ccode\u003e791\u003c/code\u003e (:github-user:\u003ccode\u003ebrowniebroke\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eRemoved\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.8 and 3.9 support was dropped to give way for typehints :github-issue:\u003ccode\u003e781\u003c/code\u003e (:github-user:\u003ccode\u003ebenjaoming\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ccode\u003e3.5.4\u003c/code\u003e_ - 2025-04-17\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAdded\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDjango 5.2 and Python 3.13 support :github-issue:\u003ccode\u003e785\u003c/code\u003e (:github-user:\u003ccode\u003egvangool\u003c/code\u003e and :github-user:\u003ccode\u003ebrowniebroke\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ccode\u003e3.5.3\u003c/code\u003e_ - 2024-08-01\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eFixed\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003edjango-rest-framework: MoneyField does not work anymore with custom serializer fields :github-issue:\u003ccode\u003e768\u003c/code\u003e (:github-user:\u003ccode\u003eapjama\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/django-money/django-money/commit/778f51df21a4ceee8d229e771c030b4ee288de00\"\u003e\u003ccode\u003e778f51d\u003c/code\u003e\u003c/a\u003e bump to 3.6.1 (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/826\"\u003e#826\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-money/django-money/commit/a2ec3fd287d293e74a3ace9affd151f400c3db8a\"\u003e\u003ccode\u003ea2ec3fd\u003c/code\u003e\u003c/a\u003e Add UniRateBackend exchange-rate backend (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/821\"\u003e#821\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-money/django-money/commit/8b9f1f452a363e5a825bfd803ffddceb66ce0aa7\"\u003e\u003ccode\u003e8b9f1f4\u003c/code\u003e\u003c/a\u003e Remove uv.lock file (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/816\"\u003e#816\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-money/django-money/commit/72b99755ef9da91e67917e95701485454728b0a1\"\u003e\u003ccode\u003e72b9975\u003c/code\u003e\u003c/a\u003e Upsert rates instead of deleting and recreating them (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/819\"\u003e#819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-money/django-money/commit/ef1529ab35979ef0c21e232f8b60298ee87f5a44\"\u003e\u003ccode\u003eef1529a\u003c/code\u003e\u003c/a\u003e docs: update README supported versions (closes \u003ca href=\"https://redirect.github.com/django-money/django-money/issues/820\"\u003e#820\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/django-money/django-money/issues/822\"\u003e#822\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/django-money/django-money/compare/3.6.0...3.6.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-otp` from 1.3.0 to 1.7.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/django-otp/django-otp/blob/master/CHANGES.rst\"\u003edjango-otp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.7.0 - January 07, 2026 - Async support\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[#185](https://github.com/django-otp/django-otp/issues/185)\u003c/code\u003e_: Make OTPMiddleware async capable\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Aljosha Papsch.\u003c/p\u003e\n\u003cp\u003e.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/185\"\u003e#185\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/185\"\u003edjango-otp/django-otp#185\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.6.3 - October 25, 2025 - Spanish update\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[#182](https://github.com/django-otp/django-otp/issues/182)\u003c/code\u003e_: Correct missing Spanish translations\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[#181](https://github.com/django-otp/django-otp/issues/181)\u003c/code\u003e_: Wrong :rtype: in StaticToken.random_token docstring\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/181\"\u003e#181\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/181\"\u003edjango-otp/django-otp#181\u003c/a\u003e\n.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/182\"\u003e#182\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/182\"\u003edjango-otp/django-otp#182\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.6.2 - October 21, 2025 - Cleanup\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[#179](https://github.com/django-otp/django-otp/issues/179)\u003c/code\u003e_: Add missing gettext strings\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[#180](https://github.com/django-otp/django-otp/issues/180)\u003c/code\u003e_: Remove tests from wheels\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/179\"\u003e#179\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/179\"\u003edjango-otp/django-otp#179\u003c/a\u003e\n.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/180\"\u003e#180\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/180\"\u003edjango-otp/django-otp#180\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.6.1 - July 08, 2025 - Small improvements\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAllow a {token} placeholder in :setting:\u003ccode\u003eOTP_EMAIL_SUBJECT\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.6.0 - April 02, 2025 - Django 5.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate test matrix for Django 5.2.\u003c/li\u003e\n\u003cli\u003eRemove support for Django 3.2.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.4 - September 06, 2024 - Ignore proxy models when enumerating device classes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e[#161](https://github.com/django-otp/django-otp/issues/161)\u003c/code\u003e_: Discard proxied models when iterating device models\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/161\"\u003e#161\u003c/a\u003e: \u003ca href=\"https://redirect.github.com/django-otp/django-otp/pull/161\"\u003edjango-otp/django-otp#161\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/django-otp/django-otp/commit/fc0d50b6f66da10fad250ce1640f0385f3229f48\"\u003e\u003ccode\u003efc0d50b\u003c/code\u003e\u003c/a\u003e Version 1.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/56e4ce3b5618de5d5a8a24c9eb709b51802ad06b\"\u003e\u003ccode\u003e56e4ce3\u003c/code\u003e\u003c/a\u003e Refactor test utilities\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/8c4d4c23649316c55dad6a79fb06fa975e5e4702\"\u003e\u003ccode\u003e8c4d4c2\u003c/code\u003e\u003c/a\u003e Update test matrix for Django 6.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/0ac4ff33aa88fa73c12aa60713881481116a6d5f\"\u003e\u003ccode\u003e0ac4ff3\u003c/code\u003e\u003c/a\u003e Cleanup and changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/b10df0d8cb94c8242ca48bbcea3d307b553808a5\"\u003e\u003ccode\u003eb10df0d\u003c/code\u003e\u003c/a\u003e Make OTPMiddleware async capable. (\u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/185\"\u003e#185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/81211794b8cc9c8befc6c8330b6652d3c4e78fd5\"\u003e\u003ccode\u003e8121179\u003c/code\u003e\u003c/a\u003e Raise requires-python to 3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/38b7ebabd7b4817aec92f884d448eeb462e82108\"\u003e\u003ccode\u003e38b7eba\u003c/code\u003e\u003c/a\u003e Version 1.6.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/b9026d7025da45b0144c99e91b5286c734448012\"\u003e\u003ccode\u003eb9026d7\u003c/code\u003e\u003c/a\u003e Correct Missing Spanish Translations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/ae18ba95bd03534e15583d456572f86ea2f41442\"\u003e\u003ccode\u003eae18ba9\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/django-otp/django-otp/issues/181\"\u003e#181\u003c/a\u003e: misdocumented return type.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/django-otp/django-otp/commit/c9eef89240985293e0c9f197d0257a5352cfb62d\"\u003e\u003ccode\u003ec9eef89\u003c/code\u003e\u003c/a\u003e Version 1.6.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/django-otp/django-otp/compare/v1.3.0...v1.7.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 `icalendar` from 7.1.2 to 7.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/collective/icalendar/releases\"\u003eicalendar's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.1.3\u003c/h2\u003e\n\u003cp\u003eTo view the changes, please see the \u003ca href=\"https://icalendar.readthedocs.io/en/latest/reference/changelog.html\"\u003eChangelog\u003c/a\u003e. This release can be installed from \u003ca href=\"https://pypi.org/project/icalendar/#history\"\u003ePyPI\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/collective/icalendar/blob/main/CHANGES.rst\"\u003eicalendar's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.1.3 (2026-06-15)\u003c/h2\u003e\n\u003cp\u003eBug fixes\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Comparing components with ``Component.__eq__`` is no longer exponential in the subcomponent nesting depth, removing a denial-of-service vector where a deeply nested component could take minutes to compare. See `GHSA-cv84-9p8j-fj68 \u0026lt;https://github.com/collective/icalendar/security/advisories/GHSA-cv84-9p8j-fj68\u0026gt;`_. @tidusec\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/f7240bc661548f9806c930f2a95ee2f003cfa8ca\"\u003e\u003ccode\u003ef7240bc\u003c/code\u003e\u003c/a\u003e version 7.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/e85eb8e6dfe598da8cc9b1c208a5dfc012213308\"\u003e\u003ccode\u003ee85eb8e\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/9c783f6574cc108e04b79dcbe9ea917b9c1eba97\"\u003e\u003ccode\u003e9c783f6\u003c/code\u003e\u003c/a\u003e Make test_deeply_nested_equality_at_depth_50 a regression test.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/dc90e913a5bf72dcf294fb27132cb20f135d9584\"\u003e\u003ccode\u003edc90e91\u003c/code\u003e\u003c/a\u003e Update news/+component-equality-complexity.bugfix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/66264ef3b914657688a828ef80aff5f5e80d9663\"\u003e\u003ccode\u003e66264ef\u003c/code\u003e\u003c/a\u003e Update src/icalendar/cal/component.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/cad40cd112c93fd142ec12cc5b37445a849b8a79\"\u003e\u003ccode\u003ecad40cd\u003c/code\u003e\u003c/a\u003e fix: comments\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/collective/icalendar/commit/b6b2608ae3af6de40695b4e40f71847485aa0b49\"\u003e\u003ccode\u003eb6b2608\u003c/code\u003e\u003c/a\u003e fix: improve time complexity in src/icalendar/cal\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/collective/icalendar/compare/v7.1.2...v7.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `protobuf` from 6.33.6 to 7.35.1\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/6ebdf851ba78728f0aa145d38454ed9a316fb...\n\n_Description has been truncated_","html_url":"https://github.com/RapariyaDeenu/InvenTree/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/RapariyaDeenu%2FInvenTree/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"}},{"old_version":"2026.5.20","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-06-26T11:36:09.000Z","version_change":"2026.5.20 → 2026.6.17","issue":{"uuid":"4751670660","node_id":"PR_kwDOP-c8CM7q9XTd","number":10,"state":"closed","title":"Bump the uv group across 1 directory with 4 updates","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-07-03T11:36:07.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-26T11:36:09.000Z","updated_at":"2026-07-03T11:36:08.000Z","time_to_close":604798,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"uv","update_count":4,"packages":[{"name":"anyio","old_version":"4.13.0","new_version":"4.14.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"ruff","old_version":"0.15.17","new_version":"0.15.18","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest","old_version":"9.0.3","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv group with 4 updates in the / directory: [anyio](https://github.com/agronholm/anyio), [certifi](https://github.com/certifi/python-certifi), [ruff](https://github.com/astral-sh/ruff) and [pytest](https://github.com/pytest-dev/pytest).\n\nUpdates `anyio` from 4.13.0 to 4.14.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.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\u003cli\u003e\n\u003cp\u003eFixed lost type information when passing arguments to \u003ccode\u003elru_cache\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1104\"\u003e#1104\u003c/a\u003e; PR by \u003ca href=\"https://github.com/Graeme22\"\u003e\u003ccode\u003e@​Graeme22\u003c/code\u003e\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFixed test resumption after \u003ccode\u003eKeyboardInterrupt\u003c/code\u003e in async generator fixtures on the asyncio backend (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1060\"\u003e#1060\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\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/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\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/29a5e04e0f171af9db3a9d0556ed47f91d88d183\"\u003e\u003ccode\u003e29a5e04\u003c/code\u003e\u003c/a\u003e Fixed FastAPI test run\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/4d752ac37e693840036367d58ee6caf19d78e9ba\"\u003e\u003ccode\u003e4d752ac\u003c/code\u003e\u003c/a\u003e Updated downstream test setups for FastAPI and Anthropic MCP\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/ebdc9508a3860e23be805985e1b5a67f60b581eb\"\u003e\u003ccode\u003eebdc950\u003c/code\u003e\u003c/a\u003e Added task handle support to start() and start_soon() (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1153\"\u003e#1153\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/f32bfb89a7fb71fc24a1fc575f402b6a9f13cda0\"\u003e\u003ccode\u003ef32bfb8\u003c/code\u003e\u003c/a\u003e Fixed test suite compatibility issues with Pytest 9.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/85f7e8eada1ed4f077e4760f0c3d20d67452dcb8\"\u003e\u003ccode\u003e85f7e8e\u003c/code\u003e\u003c/a\u003e Added \u003ccode\u003e__slots__\u003c/code\u003e to several classes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b7ea84c275fde6420ea242844bc7fb0fee6132f7\"\u003e\u003ccode\u003eb7ea84c\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1165\"\u003e#1165\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.0\"\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 `ruff` from 0.15.17 to 0.15.18\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.18\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle nested \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25791\"\u003e#25791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop displaying severity in output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26050\"\u003e#26050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25937\"\u003e#25937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in LSP and playground diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26058\"\u003e#26058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Prevent property docstrings starting with verbs (\u003ccode\u003eD421\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23775\"\u003e#23775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Extend \u003ccode\u003ePYI033\u003c/code\u003e to Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect equivalent numeric mapping keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26009\"\u003e#26009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect mapping keys equivalent to booleans (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25982\"\u003e#25982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect repeated signed and complex dictionary keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26007\"\u003e#26007\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-pyi\u003c/code\u003e] Rename \u003ccode\u003ePYI033\u003c/code\u003e to \u003ccode\u003elegacy-type-comment\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e for call keywords (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25999\"\u003e#25999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline parser recovery context checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26038\"\u003e#26038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch parser keywords as bytes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26037\"\u003e#26037\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMove value parsing out of lexing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25360\"\u003e#25360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender subdiagnostics and secondary annotations as related information (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26011\"\u003e#26011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate fix availability for always-fixable rules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26091\"\u003e#26091\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add fix safety section (\u003ccode\u003eTID252\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17491\"\u003e#17491\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eParser\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003e__debug__\u003c/code\u003e lambda parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26022\"\u003e#26022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_\u003c/code\u003e as a match-pattern target (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25977\"\u003e#25977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject multiple starred names in sequence patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25976\"\u003e#25976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject parenthesized star imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26021\"\u003e#26021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject starred comprehension targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26023\"\u003e#26023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unparenthesized generator expressions in class bases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25978\"\u003e#25978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eyield\u003c/code\u003e expressions after commas (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26024\"\u003e#26024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate function type parameter default order (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25981\"\u003e#25981\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.18\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle nested \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25791\"\u003e#25791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop displaying severity in output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26050\"\u003e#26050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25937\"\u003e#25937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in LSP and playground diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26058\"\u003e#26058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Prevent property docstrings starting with verbs (\u003ccode\u003eD421\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23775\"\u003e#23775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Extend \u003ccode\u003ePYI033\u003c/code\u003e to Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect equivalent numeric mapping keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26009\"\u003e#26009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect mapping keys equivalent to booleans (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25982\"\u003e#25982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect repeated signed and complex dictionary keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26007\"\u003e#26007\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-pyi\u003c/code\u003e] Rename \u003ccode\u003ePYI033\u003c/code\u003e to \u003ccode\u003elegacy-type-comment\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e for call keywords (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25999\"\u003e#25999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline parser recovery context checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26038\"\u003e#26038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch parser keywords as bytes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26037\"\u003e#26037\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMove value parsing out of lexing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25360\"\u003e#25360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender subdiagnostics and secondary annotations as related information (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26011\"\u003e#26011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate fix availability for always-fixable rules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26091\"\u003e#26091\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add fix safety section (\u003ccode\u003eTID252\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17491\"\u003e#17491\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eParser\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003e__debug__\u003c/code\u003e lambda parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26022\"\u003e#26022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_\u003c/code\u003e as a match-pattern target (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25977\"\u003e#25977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject multiple starred names in sequence patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25976\"\u003e#25976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject parenthesized star imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26021\"\u003e#26021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject starred comprehension targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26023\"\u003e#26023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unparenthesized generator expressions in class bases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25978\"\u003e#25978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eyield\u003c/code\u003e expressions after commas (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26024\"\u003e#26024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate function type parameter default order (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25981\"\u003e#25981\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/6686f63404207bfdffe8ab0acb25da72c3432190\"\u003e\u003ccode\u003e6686f63\u003c/code\u003e\u003c/a\u003e Bump 0.15.18 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26135\"\u003e#26135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/efbb7325ff5bb92b0a0c0a0efa0ac94e439ee367\"\u003e\u003ccode\u003eefbb732\u003c/code\u003e\u003c/a\u003e [ty] Suggest keyword-only arguments between variadic parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26134\"\u003e#26134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c256d5f573e66612556061bfd0af527136a23c30\"\u003e\u003ccode\u003ec256d5f\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eAnnotated[Any, ...]\u003c/code\u003e as a class base (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26133\"\u003e#26133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/19a4bea1af5b252798d85696f2f397dae91d303d\"\u003e\u003ccode\u003e19a4bea\u003c/code\u003e\u003c/a\u003e [flake8-pyi] Rename PYI033 to legacy-type-comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1d9866cbd673dc68153ad162465e979c47e62a96\"\u003e\u003ccode\u003e1d9866c\u003c/code\u003e\u003c/a\u003e Bump ecosystem-analyzer commit (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26130\"\u003e#26130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/8656c731dded1e91c0e2713405e43bb2c4eb53bf\"\u003e\u003ccode\u003e8656c73\u003c/code\u003e\u003c/a\u003e [ty] Compact indexed AST node storage (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25998\"\u003e#25998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c17c8d9a060f839c0f9b69c69b85d3802ec5dfdf\"\u003e\u003ccode\u003ec17c8d9\u003c/code\u003e\u003c/a\u003e [ty] Garbage-collect cached constraint sets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26116\"\u003e#26116\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ef0fb8fa264035974e57fda59e2baf196ec1fb9e\"\u003e\u003ccode\u003eef0fb8f\u003c/code\u003e\u003c/a\u003e [ty] Fix bound TypeVar default cycle recovery (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26124\"\u003e#26124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b83c02489df8bccda7313a2cdd8369c9b5d1b002\"\u003e\u003ccode\u003eb83c024\u003c/code\u003e\u003c/a\u003e [flake8-pyi] Extend PYI033 to Python files in preview (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e8a5e38858558a68e94397152fd735cacb6ea3b4\"\u003e\u003ccode\u003ee8a5e38\u003c/code\u003e\u003c/a\u003e Update Rust crate zip to v8 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26078\"\u003e#26078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.17...0.15.18\"\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\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/6AMStuff/streamrip/pull/10","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/6AMStuff%2Fstreamrip/issues/10","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/10/packages"}},{"old_version":"2026.5.20","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-06-26T10:26:25.000Z","version_change":"2026.5.20 → 2026.6.17","issue":{"uuid":"4751245194","node_id":"PR_kwDOR8p0Wc7q789K","number":923,"state":"open","title":"chore(deps): Bump the python-minor-patch group across 1 directory with 9 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-26T10:26:25.000Z","updated_at":"2026-06-26T18:37: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-patch","update_count":9,"packages":[{"name":"fastapi","old_version":"0.137.1","new_version":"0.138.1","repository_url":"https://github.com/fastapi/fastapi"},{"name":"alembic","old_version":"1.18.4","new_version":"1.18.5","repository_url":"https://github.com/sqlalchemy/alembic"},{"name":"pydantic-settings","old_version":"2.14.1","new_version":"2.14.2","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"anyio","old_version":"4.14.0","new_version":"4.14.1","repository_url":"https://github.com/agronholm/anyio"},{"name":"pytest","old_version":"9.1.0","new_version":"9.1.1","repository_url":"https://github.com/pytest-dev/pytest"},{"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":"greenlet","old_version":"3.5.1","new_version":"3.5.3","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 9 updates in the /apps/myrecipes/backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.137.1` | `0.138.1` |\n| [alembic](https://github.com/sqlalchemy/alembic) | `1.18.4` | `1.18.5` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.1` | `2.14.2` |\n| [anyio](https://github.com/agronholm/anyio) | `4.14.0` | `4.14.1` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.1.0` | `9.1.1` |\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| [greenlet](https://github.com/python-greenlet/greenlet) | `3.5.1` | `3.5.3` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n\n\nUpdates `fastapi` from 0.137.1 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.137.1...0.138.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `alembic` from 1.18.4 to 1.18.5\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/sqlalchemy/alembic/releases\"\u003ealembic's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e1.18.5\u003c/h1\u003e\n\u003cp\u003eReleased: June 25, 2026\u003c/p\u003e\n\u003ch2\u003eusecase\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [commands]\u003c/strong\u003e Added \u003ccode\u003e--splice\u003c/code\u003e support to the \u003ccode\u003emerge()\u003c/code\u003e command. Previously, the\nmerge command would suggest using \u003ccode\u003e--splice\u003c/code\u003e when attempting to merge\nnon-head revisions, but the flag was not actually accepted by the command.\nThe \u003ccode\u003esplice\u003c/code\u003e parameter is now available in both the command-line\ninterface and the \u003ccode\u003ecommand.merge()\u003c/code\u003e function, matching the existing\nsupport in \u003ccode\u003ecommand.revision()\u003c/code\u003e.  Pull request courtesy Kadir Can\nOzden.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1712\"\u003e#1712\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[usecase] [environment]\u003c/strong\u003e Added \u003ccode\u003eScriptDirectory.get_heads.consider_depends_on\u003c/code\u003e\nparameter to \u003ccode\u003eScriptDirectory.get_heads()\u003c/code\u003e. When set to \u003ccode\u003eTrue\u003c/code\u003e,\nhead revisions that are also a dependency of another revision via\n\u003ccode\u003edepends_on\u003c/code\u003e are excluded from the result, matching the effective\nheads that would be present in the \u003ccode\u003ealembic_version\u003c/code\u003e table after\nrunning all upgrades.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1806\"\u003e#1806\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ebug\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [autogenerate]\u003c/strong\u003e Fixed rendering of dialect keyword arguments containing\n\u003ccode\u003e~sqlalchemy.schema.Column\u003c/code\u003e objects within sequences, such as\n\u003ccode\u003epostgresql_include\u003c/code\u003e.  These were previously rendered using \u003ccode\u003erepr()\u003c/code\u003e,\nproducing invalid Python in the generated migration scripts.  Column\nobjects within list or tuple values are now correctly rendered as their\nstring column names.  Pull request courtesy Ajay Singh.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1258\"\u003e#1258\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [mysql]\u003c/strong\u003e Implemented type comparison for \u003ccode\u003eENUM\u003c/code\u003e datatypes on MySQL, which\nchecks that the individual enum values are equivalent.  If additional\nentries are on either side, this generates a diff.  Changes of order do not\ngenerate a diff.  Pull request courtesy Furkan Köykıran.\u003c/p\u003e\n\u003cp\u003eReferences: \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/1745\"\u003e#1745\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/sqlalchemy/alembic/issues/779\"\u003e#779\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e[bug] [operations]\u003c/strong\u003e Fixed bug where the \u003ccode\u003einline_references\u003c/code\u003e parameter of\n\u003ccode\u003eOperations.add_column()\u003c/code\u003e did not include foreign key referential\nactions such as \u003ccode\u003eON DELETE\u003c/code\u003e, \u003ccode\u003eON UPDATE\u003c/code\u003e, \u003ccode\u003eDEFERRABLE\u003c/code\u003e,\n\u003ccode\u003eINITIALLY\u003c/code\u003e, and \u003ccode\u003eMATCH\u003c/code\u003e when rendering the inline \u003ccode\u003eREFERENCES\u003c/code\u003e\nclause.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/sqlalchemy/alembic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-settings` from 2.14.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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.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 `anyio` from 4.14.0 to 4.14.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/agronholm/anyio/releases\"\u003eanyio's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.14.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed teardown of higher-scoped async fixtures failing on asyncio with \u003ccode\u003eRuntimeError: Attempted to exit cancel scope in a different task than it was entered in\u003c/code\u003e when an async test raise an outcome exception (e.g., \u003ccode\u003epytest.skip()\u003c/code\u003e, \u003ccode\u003epytest.xfail()\u003c/code\u003e, or \u003ccode\u003epytest.fail()\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1179\"\u003e#1179\u003c/a\u003e; PR by \u003ca href=\"https://github.com/EmmanuelNiyonshuti\"\u003e\u003ccode\u003e@​EmmanuelNiyonshuti\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eCapacityLimiter.total_tokens\u003c/code\u003e rejecting a value of \u003ccode\u003e0\u003c/code\u003e when the limiter was instantiated outside of an event loop, contradicting the documented behavior of allowing 0 total tokens (\u003ca href=\"https://redirect.github.com/agronholm/anyio/pull/1183\"\u003e#1183\u003c/a\u003e; PR by \u003ca href=\"https://github.com/nyxst4ck\"\u003e\u003ccode\u003e@​nyxst4ck\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/149b9e907618fadf6840a4d3cebad533b0c7d033\"\u003e\u003ccode\u003e149b9e9\u003c/code\u003e\u003c/a\u003e Bumped up the version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/377518cd1160314f2fdf74f356ae9e848c94a065\"\u003e\u003ccode\u003e377518c\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6 to 7 in the github-actions group (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/b42a2f5e8e9910d0c57b970f9a747427a9da26f0\"\u003e\u003ccode\u003eb42a2f5\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1185\"\u003e#1185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/3ceb6ffbfa89be715f444550883356fbfbc13154\"\u003e\u003ccode\u003e3ceb6ff\u003c/code\u003e\u003c/a\u003e Allow 0 tokens in a CapacityLimiter instantiated outside an event loop (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1183\"\u003e#1183\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/e10d1db74f7a59cb283a1e4b3b22227da11c6f07\"\u003e\u003ccode\u003ee10d1db\u003c/code\u003e\u003c/a\u003e Add missing await to open_file() in file I/O concurrency example (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1182\"\u003e#1182\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/agronholm/anyio/commit/1dbc3b62256e5877bcf610aca98ba6e450d14c20\"\u003e\u003ccode\u003e1dbc3b6\u003c/code\u003e\u003c/a\u003e OutcomeException should not discard test runner_task (\u003ca href=\"https://redirect.github.com/agronholm/anyio/issues/1180\"\u003e#1180\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/agronholm/anyio/compare/4.14.0...4.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest` from 9.1.0 to 9.1.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pytest-dev/pytest/releases\"\u003epytest's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e9.1.1\u003c/h2\u003e\n\u003ch1\u003epytest 9.1.1 (2026-06-19)\u003c/h1\u003e\n\u003ch2\u003eBug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e: Fixed a logic bug in \u003ccode\u003epytest.RaisesGroup\u003c/code\u003e which would might cause it to display incorrect \u0026quot;It matches \u003c!-- raw HTML omitted --\u003eFooError()\u003c!-- raw HTML omitted --\u003e which was paired with \u003c!-- raw HTML omitted --\u003eBarError\u003c!-- raw HTML omitted --\u003e\u0026quot; messages.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14591\"\u003e#14591\u003c/a\u003e: Fixed a regression in pytest 9.1.0 which caused overriding a parametrized fixture with an indirect \u003c!-- raw HTML omitted --\u003e\u003ca href=\"https://github.com/pytest\"\u003e\u003ccode\u003e@​pytest\u003c/code\u003e\u003c/a\u003e.mark.parametrize\u003c!-- raw HTML omitted --\u003e to fail with \u0026quot;duplicate parametrization of '\u0026lt;fixture name\u0026gt;'\u0026quot;.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14606\"\u003e#14606\u003c/a\u003e: Fixed \u003ccode\u003elist-item\u003c/code\u003e typing errors from mypy in \u003ccode\u003e@pytest.mark.parametrize \u0026lt;pytest.mark.parametrize ref\u0026gt;\u003c/code\u003e \u003ccode\u003eargvalues\u003c/code\u003e parameter.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14608\"\u003e#14608\u003c/a\u003e: Fixed a regression in pytest 9.1.0 where \u003ccode\u003econftest.py\u003c/code\u003e files located in \u003ccode\u003e\u0026lt;invocation dir\u0026gt;/test*\u003c/code\u003e were no longer loaded as initial conftests when invoked without arguments.\nThis could cause certain hooks (like \u003ccode\u003epytest_addoption\u003c/code\u003e) in these files to not fire.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/cf470ec0bf7eb89cd97dd56df4859eae5db46447\"\u003e\u003ccode\u003ecf470ec\u003c/code\u003e\u003c/a\u003e Prepare release version 9.1.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/e0c8ce6cc5db1f08363be6f152c32e6838df2690\"\u003e\u003ccode\u003ee0c8ce6\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14625\"\u003e#14625\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/a07c31a97...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/1b82d1694fce22385ee7a4287917fbafbaf2e757\"\u003e\u003ccode\u003e1b82d16\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14624\"\u003e#14624\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/b375b79ec...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/501c4bc784da3b08bfcaa64858eba5d15dc59e53\"\u003e\u003ccode\u003e501c4bc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14596\"\u003e#14596\u003c/a\u003e from bluetech/doc-classmethod\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/b61f588e36e9377c3d1d3f06bece1da0fc31d9ca\"\u003e\u003ccode\u003eb61f588\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14622\"\u003e#14622\u003c/a\u003e from chrisburr/fix-14608-initial-conftest-test-subdir\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/9a567e009f4d2da3ce1721c6db3109cb5744d40a\"\u003e\u003ccode\u003e9a567e0\u003c/code\u003e\u003c/a\u003e [automated] Update plugin list (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14617\"\u003e#14617\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14618\"\u003e#14618\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/ef8b2993e5b48639e4a3d97d0525df9760781384\"\u003e\u003ccode\u003eef8b299\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14620\"\u003e#14620\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/680f9f3ed...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/66abd0784d4cb7c1ba44ab9a8896506cd4985acc\"\u003e\u003ccode\u003e66abd07\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14220\"\u003e#14220\u003c/a\u003e from bysiber/fix-stale-iexp-raisesgroup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/79fbf93b666cac5f27c9dad047943d47b766c8d5\"\u003e\u003ccode\u003e79fbf93\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14612\"\u003e#14612\u003c/a\u003e from pytest-dev/patchback/backports/9.1.x/974ed48b6...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pytest-dev/pytest/commit/0d312eb876177e9f1c04262b54060a41034ebf5c\"\u003e\u003ccode\u003e0d312eb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pytest-dev/pytest/issues/14611\"\u003e#14611\u003c/a\u003e from bluetech/parametrize-argvalues-typing\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pytest-dev/pytest/compare/9.1.0...9.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `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 `greenlet` from 3.5.1 to 3.5.3\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.3 (2026-06-26)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix a crash on free-threaded builds when multiple greenlets were\nholding a critical section on an object and the GIL for the thread\nwas dropped. See \u003ccode\u003eissue 513 \u0026lt;https://github.com/python-greenlet/greenlet/issues/513\u0026gt;\u003c/code\u003e_. Thanks\nto ddorian.\u003c/li\u003e\n\u003c/ul\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\u003c/blockquote\u003e\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/6ee8c2c5b92fbf296c10219030d0bd3ab0ea6300\"\u003e\u003ccode\u003e6ee8c2c\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/6ec0bbba46fdcbfbf5fe4a37ab744aa3835f05c6\"\u003e\u003ccode\u003e6ec0bbb\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/514\"\u003e#514\u003c/a\u003e from python-greenlet/issue513-preserve-crit-section\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c03a7e6932c3b437bdf873acfc66fbaae31f1875\"\u003e\u003ccode\u003ec03a7e6\u003c/code\u003e\u003c/a\u003e Py3.13+: Preserve thread state critical_section to prevent crash on free-thre...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/bc10829b9eb05d35bc0b8a09c8c6e4d54cfccc18\"\u003e\u003ccode\u003ebc10829\u003c/code\u003e\u003c/a\u003e Speed up manylinux test runs by only running the core checks; only start many...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c2db75dca4bafa562ace9553b6e5c17af6b483e4\"\u003e\u003ccode\u003ec2db75d\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.3\u003c/li\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.5.1...3.5.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydantic-core` from 2.46.4 to 2.47.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n","html_url":"https://github.com/jykwon91/MyFreeApps/pull/923","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/jykwon91%2FMyFreeApps/issues/923","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/923/packages"}},{"old_version":"2026.2.25","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-06-25T00:49:57.000Z","version_change":"2026.2.25 → 2026.6.17","issue":{"uuid":"4739606925","node_id":"PR_kwDORQ8Eq87qWao8","number":130,"state":"open","title":"build(deps): bump the python-minor-patch group across 1 directory with 11 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-25T00:49:57.000Z","updated_at":"2026-06-25T01:11:06.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":11,"packages":[{"name":"certifi","old_version":"2026.2.25","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"charset-normalizer","old_version":"3.4.5","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"docutils","old_version":"0.22.4","new_version":"0.23","repository_url":"https://github.com/rtfd/recommonmark"},{"name":"huggingface-hub","old_version":"1.18.0","new_version":"1.20.1","repository_url":"https://github.com/huggingface/huggingface_hub"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"jaraco-context","old_version":"6.1.1","new_version":"6.1.2","repository_url":"https://github.com/jaraco/jaraco.context"},{"name":"jaraco-functools","old_version":"4.4.0","new_version":"4.5.0","repository_url":"https://github.com/jaraco/jaraco.functools"},{"name":"lxml","old_version":"6.1.0","new_version":"6.1.1","repository_url":"https://github.com/lxml/lxml"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"nh3","old_version":"0.3.3","new_version":"0.3.6","repository_url":"https://github.com/messense/nh3"},{"name":"semgrep","old_version":"1.166.0","new_version":"1.168.0","repository_url":"https://github.com/semgrep/semgrep"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 11 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.6.17` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.5` | `3.4.7` |\n| [docutils](https://github.com/rtfd/recommonmark) | `0.22.4` | `0.23` |\n| [huggingface-hub](https://github.com/huggingface/huggingface_hub) | `1.18.0` | `1.20.1` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [jaraco-context](https://github.com/jaraco/jaraco.context) | `6.1.1` | `6.1.2` |\n| [jaraco-functools](https://github.com/jaraco/jaraco.functools) | `4.4.0` | `4.5.0` |\n| [lxml](https://github.com/lxml/lxml) | `6.1.0` | `6.1.1` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [nh3](https://github.com/messense/nh3) | `0.3.3` | `0.3.6` |\n| [semgrep](https://github.com/semgrep/semgrep) | `1.166.0` | `1.168.0` |\n\n\nUpdates `certifi` from 2026.2.25 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.06.17\"\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.5 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\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.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\u003c/blockquote\u003e\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.5...3.4.7\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `docutils` from 0.22.4 to 0.23\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/rtfd/recommonmark/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `huggingface-hub` from 1.18.0 to 1.20.1\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.20.0] Browser-based OAuth login, multi-commit folder uploads, and more\u003c/h2\u003e\n\u003ch2\u003e🔒 Browser-based OAuth login\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehf auth login\u003c/code\u003e now defaults to a browser-based OAuth Device Code flow instead of asking you to copy-paste a token. The command prints a URL and a short code, you authorize in the browser, and the CLI retrieves and saves the token for you. The same applies to \u003ccode\u003elogin()\u003c/code\u003e in Python. In an interactive terminal you still get a \u003ccode\u003egh\u003c/code\u003e-style arrow-key menu to pick between browser login and pasting a token, and \u003ccode\u003e--token\u003c/code\u003e works exactly as before.\u003c/p\u003e\n\u003cp\u003eOAuth tokens expire after 30 days, but they come with a refresh token: \u003ccode\u003eget_token()\u003c/code\u003e transparently refreshes them when less than a day of validity remains, so long-running setups keep working without re-authenticating. \u003ccode\u003ehf auth list\u003c/code\u003e now shows the expiry date for OAuth tokens.\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e\u0026gt; hf auth login\r\n? How would you like to log in? Log in with your browser\r\n\u003cpre\u003e\u003ccode\u003eOpen this URL in your browser:\r\n    https://hf.co/oauth/device\r\n\r\nAnd enter the code: 52AT-FLYZ\r\n\r\nWaiting for authorization.\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eWhen the command is run by an AI agent, it never prompts. Instead it streams structured events so the agent can surface the URL and code to its user, then blocks until a terminal \u003ccode\u003eauth_success\u003c/code\u003e / \u003ccode\u003eauth_error\u003c/code\u003e event:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ hf auth login --format json\r\n{\u0026quot;event\u0026quot;: \u0026quot;device_code\u0026quot;, \u0026quot;verification_uri\u0026quot;: \u0026quot;https://hf.co/oauth/device\u0026quot;, \u0026quot;user_code\u0026quot;: \u0026quot;52AT-FLYZ\u0026quot;, \u0026quot;verification_uri_complete\u0026quot;: \u0026quot;https://hf.co/oauth/device\u0026quot;, \u0026quot;expires_in\u0026quot;: 300, \u0026quot;interval\u0026quot;: 5}\r\n{\u0026quot;event\u0026quot;: \u0026quot;auth_success\u0026quot;, \u0026quot;user\u0026quot;: \u0026quot;celinah\u0026quot;, \u0026quot;token_name\u0026quot;: \u0026quot;oauth-celinah\u0026quot;}\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003ehf auth list\u003c/code\u003e surfaces the new expiry column:\u003c/p\u003e\n\u003cpre lang=\"console\"\u003e\u003ccode\u003e$ hf auth list\r\n  name          token       expires\r\n- ------------- ----------- -------------------\r\n  my-token      hf_****5678\r\n* oauth-user    hf_****1234 2026-07-09\r\n  oauth-old     hf_****9999 2026-06-09 (expired)\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eFinally, \u003ccode\u003enotebook_login()\u003c/code\u003e now renders the link and code with plain \u003ccode\u003eIPython.display.HTML\u003c/code\u003e, dropping the \u003ccode\u003eipywidgets\u003c/code\u003e dependency.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e[Auth] Browser-based OAuth login 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/4354\"\u003e#4354\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e⚡ Faster, more reliable \u003ccode\u003ehf upload\u003c/code\u003e for large folders\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ehf upload\u003c/code\u003e and the underlying \u003ccode\u003eupload_folder\u003c/code\u003e have been revamped to be faster and far more robust on large folders. When \u003ccode\u003ehf_xet\u003c/code\u003e is installed (the default), uploads now run through a streamed, multi-commit pipeline built on the \u003ccode\u003eXetSession\u003c/code\u003e API: the folder is scanned and fed into a background Xet upload while previous batches are committed in parallel, and files are hashed in a single read pass while they are chunked (the old flow read every large file twice). Nothing changes in how you call it:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003ehf upload \u0026lt;repo-id\u0026gt; \u0026lt;path/to/folder\u0026gt;\r\n\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/5efdca0b066740c911e59feba2f14e145ff3dbfb\"\u003e\u003ccode\u003e5efdca0\u003c/code\u003e\u003c/a\u003e Release: v1.20.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/0c3a0622f413923853faced000b97446194a6fae\"\u003e\u003ccode\u003e0c3a062\u003c/code\u003e\u003c/a\u003e [Auth] Fix circular import on \u003ccode\u003efrom huggingface_hub import login\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4384\"\u003e#4384\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4\"\u003e#4\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/8d52526f5d44cf835b9c2a9fb2e4ac03d545c8ed\"\u003e\u003ccode\u003e8d52526\u003c/code\u003e\u003c/a\u003e Release: v1.20.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/9379ae35ee840fdf889147c7f21fadb32c44db03\"\u003e\u003ccode\u003e9379ae3\u003c/code\u003e\u003c/a\u003e Release: v1.20.0.rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/3b3abe38b7ae761eb1bebfb0676b5bd2b9f2a2c1\"\u003e\u003ccode\u003e3b3abe3\u003c/code\u003e\u003c/a\u003e [Spaces] Add \u003ccode\u003ewait_for_space\u003c/code\u003e API and \u003ccode\u003ehf spaces wait\u003c/code\u003e CLI (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4380\"\u003e#4380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/e52fdef6100a9f3a5d08a146fe99910f297807e0\"\u003e\u003ccode\u003ee52fdef\u003c/code\u003e\u003c/a\u003e [CLI] Make \u003ccode\u003ehf jobs ssh\u003c/code\u003e wait for job to be running (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4379\"\u003e#4379\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/a0c1dfeeb1ef7468e616012149b62fd3566915b2\"\u003e\u003ccode\u003ea0c1dfe\u003c/code\u003e\u003c/a\u003e [Jobs] Add \u003ccode\u003ehf jobs wait\u003c/code\u003e and \u003ccode\u003eHfApi.wait_for_job\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4345\"\u003e#4345\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/558987464c237d84cd1f6e3062feff420a39b7c5\"\u003e\u003ccode\u003e5589874\u003c/code\u003e\u003c/a\u003e [Inference Endpoints] Custom-container deploy CLI + deprecate protected endpo...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/462d09366e5d215b72b710769326c4c7baf26f9c\"\u003e\u003ccode\u003e462d093\u003c/code\u003e\u003c/a\u003e [CLI] Suggest creating repo/bucket on NotFound errors (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4372\"\u003e#4372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/huggingface/huggingface_hub/commit/ebe5315b56c53ad0a912d21ce9558ddc9e9f9be5\"\u003e\u003ccode\u003eebe5315\u003c/code\u003e\u003c/a\u003e Add new JobNotFound error (\u003ca href=\"https://redirect.github.com/huggingface/huggingface_hub/issues/4367\"\u003e#4367\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.20.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.15 to 3.18\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.18 (2026-06-02)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen decoding a domain, add a \u003ccode\u003edisplay\u003c/code\u003e argument that will pass\nthrough invalid labels rather than raising an exception.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.17 (2026-05-28)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSubstantial 75% reduction in memory usage through new data\nstructures and some optimization in processing speed.\u003c/li\u003e\n\u003cli\u003eAdded a general 1024-character input length cap to the public\nvalidation, conversion, and codec entry points. This is well above\nany legitimate domain or label and guards against pathological\ninputs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.16 (2026-05-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a command-line interface (\u003ccode\u003epython -m idna\u003c/code\u003e, also available as\nthe \u003ccode\u003eidna\u003c/code\u003e script). Encodes or decodes one or more domains supplied\nas arguments or on standard input, with options to select A-label\nor U-label output and control error handling.\u003c/li\u003e\n\u003cli\u003eRaise the minimum supported Python version to 3.9\u003c/li\u003e\n\u003cli\u003eVarious code quality 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/kjd/idna/commit/f39ea903ba49eb5a0b2c6723c9a929b41ed4a0f1\"\u003e\u003ccode\u003ef39ea90\u003c/code\u003e\u003c/a\u003e Release 3.18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/40f4e407bc7452da37c24b0c112dcda9a5b299ba\"\u003e\u003ccode\u003e40f4e40\u003c/code\u003e\u003c/a\u003e Pre-release 3.18rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1a5bf80f2fa40454589e6144efe5f72015ef9d24\"\u003e\u003ccode\u003e1a5bf80\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/253\"\u003e#253\u003c/a\u003e from kjd/lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5bbb26fc86e28c4ee1434ae8ae8db76de4c2a5ac\"\u003e\u003ccode\u003e5bbb26f\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c532bae5270489cef8faf9f6b1eb70cbcb454c6d\"\u003e\u003ccode\u003ec532bae\u003c/code\u003e\u003c/a\u003e Rename decode() lenient= option to display= (issue \u003ca href=\"https://redirect.github.com/kjd/idna/issues/248\"\u003e#248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0b1758ba11952a2e88fd6141ffa620409bff0580\"\u003e\u003ccode\u003e0b1758b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/252\"\u003e#252\u003c/a\u003e from kjd/release-3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f48619c4cea6859b938d560fdd9feb898e678567\"\u003e\u003ccode\u003ef48619c\u003c/code\u003e\u003c/a\u003e Release 3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7421ba8003227f816142ab40178e3a7d204e6847\"\u003e\u003ccode\u003e7421ba8\u003c/code\u003e\u003c/a\u003e Pre-release 3.17rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/22ebb73b164081f209449b50162eb7ce086e96a4\"\u003e\u003ccode\u003e22ebb73\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/251\"\u003e#251\u003c/a\u003e from kjd/structure-optimizations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2a7ac0a58c788d50112a5003af545a83807fb108\"\u003e\u003ccode\u003e2a7ac0a\u003c/code\u003e\u003c/a\u003e Drop redundant parallel-arrays comment from uts46data\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.15...v3.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jaraco-context` from 6.1.1 to 6.1.2\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jaraco/jaraco.context/blob/main/NEWS.rst\"\u003ejaraco-context's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev6.1.2\u003c/h1\u003e\n\u003cp\u003eNo significant changes.\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/jaraco/jaraco.context/commit/098f39c911d4504b2c718f2ff483ae24f1c4d378\"\u003e\u003ccode\u003e098f39c\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/926a20e42307a2b5d87b058f2df42345fba61ad4\"\u003e\u003ccode\u003e926a20e\u003c/code\u003e\u003c/a\u003e Fix condition for skipping safety test on Python 3.12 (\u003ca href=\"https://redirect.github.com/jaraco/jaraco.context/issues/20\"\u003e#20\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/19f1cbbcf4811fec84c2fee47e51c1a823b7d368\"\u003e\u003ccode\u003e19f1cbb\u003c/code\u003e\u003c/a\u003e Strict type checking and re-enable mypy (\u003ca href=\"https://redirect.github.com/jaraco/jaraco.context/issues/16\"\u003e#16\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/256995fa4d2bcaf5513d7d14204045de94b4957d\"\u003e\u003ccode\u003e256995f\u003c/code\u003e\u003c/a\u003e Suppress coverage errors.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/0190667b24bd7b7f5f199ec36dc6e974fa31aab2\"\u003e\u003ccode\u003e0190667\u003c/code\u003e\u003c/a\u003e Suppress type errors in test_safety.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/bc0dc8a641a0ef9539bd7b193c961f8de05344e0\"\u003e\u003ccode\u003ebc0dc8a\u003c/code\u003e\u003c/a\u003e Suppress type errors with new property.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/8eee4d0bbf99ee75163865b150e638378e5a0b46\"\u003e\u003ccode\u003e8eee4d0\u003c/code\u003e\u003c/a\u003e Modernize with ruff\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/825171649ef9d312b6f9740d235d206c0e927c3e\"\u003e\u003ccode\u003e8251716\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into Strict-type-checking-and-re-enable-mypy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/7df1443e0d81d0f7a781231ab05e00fc4173672e\"\u003e\u003ccode\u003e7df1443\u003c/code\u003e\u003c/a\u003e Restore expression algebra.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.context/commit/616e2d6153eea558d0acf971adefc4d2c9dd6fc9\"\u003e\u003ccode\u003e616e2d6\u003c/code\u003e\u003c/a\u003e Merge \u003ca href=\"https://github.com/jaraco/skeleton\"\u003ehttps://github.com/jaraco/skeleton\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jaraco/jaraco.context/compare/v6.1.1...v6.1.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jaraco-functools` from 4.4.0 to 4.5.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jaraco/jaraco.functools/blob/main/NEWS.rst\"\u003ejaraco-functools's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev4.5.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ebypass_when\u003c/code\u003e and \u003ccode\u003ebypass_unless\u003c/code\u003e now accept callable checks and evaluate\nthem on each invocation instead of binding only at decoration time. (\u003ca href=\"https://redirect.github.com/jaraco/jaraco.functools/issues/36\"\u003e#36\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/jaraco/jaraco.functools/commit/0e89d963ab0a2d6d0755df2424e5e3d5b983cf98\"\u003e\u003ccode\u003e0e89d96\u003c/code\u003e\u003c/a\u003e Finalize\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/4df0abd88dc7c36897b4f40abebda9ae7b24d33e\"\u003e\u003ccode\u003e4df0abd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/jaraco/jaraco.functools/issues/36\"\u003e#36\u003c/a\u003e from jaraco/copilot/enhance-bypass-decorators-callables\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/e3ad23e72c049950d79d4c1c702a9b7e286d6983\"\u003e\u003ccode\u003ee3ad23e\u003c/code\u003e\u003c/a\u003e 👹 Feed the hobgoblins (delint).\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/9ed118eb092ba639e925578576192d0da823d93f\"\u003e\u003ccode\u003e9ed118e\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into copilot/enhance-bypass-decorators-callables\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/d3cdfdf173d8f073d3c51f7d452e3860d783e283\"\u003e\u003ccode\u003ed3cdfdf\u003c/code\u003e\u003c/a\u003e 👹 Feed the hobgoblins (delint).\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/dfc27da53d5b17d1d3b9b04459933f9054a1e3a2\"\u003e\u003ccode\u003edfc27da\u003c/code\u003e\u003c/a\u003e Merge \u003ca href=\"https://github.com/jaraco/skeleton\"\u003ehttps://github.com/jaraco/skeleton\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/dc2a6a50c7b45d357e608b6beafd1339719d2f7c\"\u003e\u003ccode\u003edc2a6a5\u003c/code\u003e\u003c/a\u003e Rename towncrier fragment to PR number\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/a99352800c88bcac801dc3385cb9952f7729e946\"\u003e\u003ccode\u003ea993528\u003c/code\u003e\u003c/a\u003e Add feature news fragment for callable bypass checks\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/2257f0ecead9b3b4bdc57615edb47485572b1669\"\u003e\u003ccode\u003e2257f0e\u003c/code\u003e\u003c/a\u003e Inline bypass check normalization call\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jaraco/jaraco.functools/commit/4d5cf8b5ba250ee46ef59fa7cd9760806ee06440\"\u003e\u003ccode\u003e4d5cf8b\u003c/code\u003e\u003c/a\u003e Drop redundant bypass unit tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/jaraco/jaraco.functools/compare/v4.4.0...v4.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `lxml` from 6.1.0 to 6.1.1\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.1 (2026-05-18)\u003c/h1\u003e\n\u003ch2\u003eBugs fixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe known link attributes in \u003ccode\u003elxml.html.defs.link_attrs\u003c/code\u003e were missing \u003ccode\u003exlink:href\u003c/code\u003e,\nwhich can be used for URL bypass attacks in embedded SVG/MathML/etc. content.\n\u003ca href=\"https://github.com/fedora-python/lxml_html_clean/security/advisories/GHSA-4jhm-jv67-739f\"\u003ehttps://github.com/fedora-python/lxml_html_clean/security/advisories/GHSA-4jhm-jv67-739f\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe Linux wheels use a patched libxslt 1.1.43, fixing CVE-2025-7424 and CVE-2025-11731.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe Windows wheels use libxslt 1.1.45, fixing CVE-2025-7424 and CVE-2025-11731.\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/lxml/lxml/commit/b4a4c595fb875d6f50ae113449834209a364643a\"\u003e\u003ccode\u003eb4a4c59\u003c/code\u003e\u003c/a\u003e Build: Fix build in Py3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/a116dcbe671a792dd65bc73f53a8209e7d7c25ff\"\u003e\u003ccode\u003ea116dcb\u003c/code\u003e\u003c/a\u003e Fix typo: type annotions -\u0026gt; type annotations in PEP 560 comments (\u003ca href=\"https://redirect.github.com/lxml/lxml/issues/504\"\u003eGH-504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/7287a75eedc4cdc247a7937d09013e936c34ace6\"\u003e\u003ccode\u003e7287a75\u003c/code\u003e\u003c/a\u003e Prepare release of 6.1.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/5927a6d5e851845140975d99b65461e255caaab0\"\u003e\u003ccode\u003e5927a6d\u003c/code\u003e\u003c/a\u003e Add missing \u0026quot;xlink:href\u0026quot; to the known HTML link attributes.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/23efeb4910e43e9545b754ce1f138d91ed5cc25c\"\u003e\u003ccode\u003e23efeb4\u003c/code\u003e\u003c/a\u003e Build: Fix build in Py3.8.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/2c0563b3e8c272e62667c7850612347f65d2952e\"\u003e\u003ccode\u003e2c0563b\u003c/code\u003e\u003c/a\u003e Build: Add bug patch for libxslt 1.1.43 and apply it during the static librar...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/lxml/lxml/commit/8a35fcc3ed53975c762867c3ac8ae318c7960be7\"\u003e\u003ccode\u003e8a35fcc\u003c/code\u003e\u003c/a\u003e Fix doctest in PyPy3.9.\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/lxml/lxml/compare/lxml-6.1.0...lxml-6.1.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `markdown-it-py` from 4.0.0 to 4.2.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/executablebooks/markdown-it-py/releases\"\u003emarkdown-it-py's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003emake_fence_rule()\u003c/code\u003e factory for configurable fence markers by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/394\"\u003eexecutablebooks/markdown-it-py#394\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🚀 RELEASE v4.2.0 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/395\"\u003eexecutablebooks/markdown-it-py#395\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v4.1.0...v4.2.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v4.1.0...v4.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003e--stdin\u003c/code\u003e option to CLI by \u003ca href=\"https://github.com/mcepl\"\u003e\u003ccode\u003e@​mcepl\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/379\"\u003eexecutablebooks/markdown-it-py#379\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md and copilot-setup-steps workflow by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/380\"\u003eexecutablebooks/markdown-it-py#380\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add typing to Scanner by \u003ca href=\"https://github.com/Alunderin\"\u003e\u003ccode\u003e@​Alunderin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/382\"\u003eexecutablebooks/markdown-it-py#382\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Fix quadratic complexity in \u003ccode\u003efragments_join\u003c/code\u003e / \u003ccode\u003etext_join\u003c/code\u003e by \u003ca href=\"https://github.com/petricevich\"\u003e\u003ccode\u003e@​petricevich\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/389\"\u003eexecutablebooks/markdown-it-py#389\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨Allow plugins to register inline terminator characters by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/391\"\u003eexecutablebooks/markdown-it-py#391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ Add \u003ccode\u003egfm-like2\u003c/code\u003e preset with task lists, alerts, and single-tilde strikethrough by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/388\"\u003eexecutablebooks/markdown-it-py#388\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Update pre-commit hooks by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/392\"\u003eexecutablebooks/markdown-it-py#392\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🚀 RELEASE v4.1.0 by \u003ca href=\"https://github.com/chrisjsewell\"\u003e\u003ccode\u003e@​chrisjsewell\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/393\"\u003eexecutablebooks/markdown-it-py#393\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/mcepl\"\u003e\u003ccode\u003e@​mcepl\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/379\"\u003eexecutablebooks/markdown-it-py#379\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/executablebooks/markdown-it-py/pull/380\"\u003eexecutablebooks/markdown-it-py#380\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Alunderin\"\u003e\u003ccode\u003e@​Alunderin\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/382\"\u003eexecutablebooks/markdown-it-py#382\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/petricevich\"\u003e\u003ccode\u003e@​petricevich\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/389\"\u003eexecutablebooks/markdown-it-py#389\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v4.0.0...v4.1.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v4.0.0...v4.1.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/executablebooks/markdown-it-py/blob/master/CHANGELOG.md\"\u003emarkdown-it-py's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.2.0 - 2026-05-07\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003emake_fence_rule()\u003c/code\u003e factory for configurable fence markers in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/394\"\u003e#394\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.1.0 - 2025-05-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e✨ Add \u003ccode\u003egfm-like2\u003c/code\u003e preset with task lists, alerts, and single-tilde strikethrough core plugins in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/388\"\u003e#388\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ Allow plugins to register inline terminator characters in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/391\"\u003e#391\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Fix quadratic complexity in \u003ccode\u003efragments_join\u003c/code\u003e / \u003ccode\u003etext_join\u003c/code\u003e in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/389\"\u003e#389\u003c/a\u003e, thanks to \u003ca href=\"https://github.com/petricevich\"\u003e\u003ccode\u003e@​petricevich\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👌 Add \u003ccode\u003e--stdin\u003c/code\u003e option to CLI for reading Markdown from standard input in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/379\"\u003e#379\u003c/a\u003e, thanks to \u003ca href=\"https://github.com/mcepl\"\u003e\u003ccode\u003e@​mcepl\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🔧 Add typing to Scanner in \u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/pull/382\"\u003e#382\u003c/a\u003e, thanks to \u003ca href=\"https://github.com/Alunderin\"\u003e\u003ccode\u003e@​Alunderin\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v4.0.0...v4.1.0\"\u003ehttps://github.com/executablebooks/markdown-it-py/compare/v4.0.0...v4.1.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/36c5f547144df2d01970a5792d68c71a3380b227\"\u003e\u003ccode\u003e36c5f54\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.2.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/395\"\u003e#395\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/96cf077ba5a6b3b4b2f862db7e0fc532694a72e9\"\u003e\u003ccode\u003e96cf077\u003c/code\u003e\u003c/a\u003e ✨ Add \u003ccode\u003emake_fence_rule()\u003c/code\u003e factory for configurable fence markers (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/394\"\u003e#394\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/3b4ff6ddd368b679643d12debf09e10ef602d4db\"\u003e\u003ccode\u003e3b4ff6d\u003c/code\u003e\u003c/a\u003e 🚀 RELEASE v4.1.0 (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/393\"\u003e#393\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/8951f267370b03a26ae88600a6dfc707ea290067\"\u003e\u003ccode\u003e8951f26\u003c/code\u003e\u003c/a\u003e 🔧 Update pre-commit hooks (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/392\"\u003e#392\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/693bb24063b6c658d60c7c14203ac6470387e3c6\"\u003e\u003ccode\u003e693bb24\u003c/code\u003e\u003c/a\u003e ✨ Add \u003ccode\u003egfm-like2\u003c/code\u003e preset with task lists, alerts, and single-tilde strikethro...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/df6fd361099cab7fe0259467c3aaa3f284ec8259\"\u003e\u003ccode\u003edf6fd36\u003c/code\u003e\u003c/a\u003e ✨Allow plugins to register inline terminator characters (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/391\"\u003e#391\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/d4ea0ca7f44e3ca86c18a87356502c59e5e49ec3\"\u003e\u003ccode\u003ed4ea0ca\u003c/code\u003e\u003c/a\u003e 👌 Fix quadratic complexity in \u003ccode\u003efragments_join\u003c/code\u003e / \u003ccode\u003etext_join\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/389\"\u003e#389\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/89331476e44c150bc32e2597a5fae4cd15391167\"\u003e\u003ccode\u003e8933147\u003c/code\u003e\u003c/a\u003e 🔧 Add typing to Scanner (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/382\"\u003e#382\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/2f6ae107ba32e9a7bd2d00134d09a78ec805a6a0\"\u003e\u003ccode\u003e2f6ae10\u003c/code\u003e\u003c/a\u003e 🔧 Add AGENTS.md and copilot-setup-steps workflow (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/380\"\u003e#380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/executablebooks/markdown-it-py/commit/49043e4445d233598fb893bed6949f7b25ae4e27\"\u003e\u003ccode\u003e49043e4\u003c/code\u003e\u003c/a\u003e Add --stdin option to CLI for reading Markdown from standard input (\u003ca href=\"https://redirect.github.com/executablebooks/markdown-it-py/issues/379\"\u003e#379\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/executablebooks/markdown-it-py/compare/v4.0.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 `nh3` from 0.3.3 to 0.3.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/messense/nh3/releases\"\u003enh3's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.3.6\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eValidate clean_content_tags conflict with tags by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/125\"\u003emessense/nh3#125\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument tag_attribute_values as alternate to attributes by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/126\"\u003emessense/nh3#126\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd nh3.escape alias for clean_text by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/127\"\u003emessense/nh3#127\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pyo3 from 0.28.3 to 0.29.0 by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/130\"\u003emessense/nh3#130\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpose ammonia's url_relative policy via url_relative kwarg by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/131\"\u003emessense/nh3#131\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/messense/nh3/compare/v0.3.5...v0.3.6\"\u003ehttps://github.com/messense/nh3/compare/v0.3.5...v0.3.6\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev0.3.5\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd usage examples for clean() and Cleaner arguments by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/120\"\u003emessense/nh3#120\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd doctest coverage for module docstrings and RST files by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/121\"\u003emessense/nh3#121\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pyo3 from 0.28.2 to 0.28.3 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/messense/nh3/pull/123\"\u003emessense/nh3#123\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd tags parameter to clean_text by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/122\"\u003emessense/nh3#122\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/messense/nh3/compare/v0.3.4...v0.3.5\"\u003ehttps://github.com/messense/nh3/compare/v0.3.4...v0.3.5\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev0.3.4\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump pyo3 from 0.28.1 to 0.28.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/messense/nh3/pull/114\"\u003emessense/nh3#114\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate rel attribute conflict with link_rel by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/117\"\u003emessense/nh3#117\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpose default clean_content_tags as module constant by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/118\"\u003emessense/nh3#118\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept frozenset and Mapping in type stubs by \u003ca href=\"https://github.com/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/119\"\u003emessense/nh3#119\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/gghez\"\u003e\u003ccode\u003e@​gghez\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/messense/nh3/pull/117\"\u003emessense/nh3#117\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/messense/nh3/compare/v0.3.3...v0.3.4\"\u003ehttps://github.com/messense/nh3/compare/v0.3.3...v0.3.4\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/messense/nh3/commit/bea70dfcdd0b9e246f884416dec9c73f9e8923cf\"\u003e\u003ccode\u003ebea70df\u003c/code\u003e\u003c/a\u003e Bump version to 0.3.6\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/788cee289054b95930034eeaedb3424548302456\"\u003e\u003ccode\u003e788cee2\u003c/code\u003e\u003c/a\u003e Expose ammonia's url_relative policy via url_relative kwarg (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/131\"\u003e#131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/e76a81acc58a98a55992ece96740a1e5a448e222\"\u003e\u003ccode\u003ee76a81a\u003c/code\u003e\u003c/a\u003e Bump pyo3 from 0.28.3 to 0.29.0 (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/130\"\u003e#130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/8ec45a31335b0df9664d22749067fe41a3e369bc\"\u003e\u003ccode\u003e8ec45a3\u003c/code\u003e\u003c/a\u003e Add nh3.escape alias for clean_text (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/a1e022621e862cf27b929b645cb264d2bf8376df\"\u003e\u003ccode\u003ea1e0226\u003c/code\u003e\u003c/a\u003e Document tag_attribute_values as alternate to attributes (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/126\"\u003e#126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/389fb797d5203dab4d0691863bd56ff18136a433\"\u003e\u003ccode\u003e389fb79\u003c/code\u003e\u003c/a\u003e Validate clean_content_tags conflict with tags (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/125\"\u003e#125\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/61aad5aaf6c719299b3319e2632c7e96500b0fe6\"\u003e\u003ccode\u003e61aad5a\u003c/code\u003e\u003c/a\u003e Bump uraimo/run-on-arch-action in the github-actions group (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/124\"\u003e#124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/9e78e6af74267c6789c62e98512460990415fb91\"\u003e\u003ccode\u003e9e78e6a\u003c/code\u003e\u003c/a\u003e Bump version to 0.3.5\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/5225ec29f6ba74349d158676461fa6081cf804d8\"\u003e\u003ccode\u003e5225ec2\u003c/code\u003e\u003c/a\u003e Add tags parameter to clean_text (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/122\"\u003e#122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/messense/nh3/commit/129df5295dd98b263a3f24bd4f9bd5e43a7bb677\"\u003e\u003ccode\u003e129df52\u003c/code\u003e\u003c/a\u003e Bump pyo3 from 0.28.2 to 0.28.3 (\u003ca href=\"https://redirect.github.com/messense/nh3/issues/123\"\u003e#123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/messense/nh3/compare/v0.3.3...v0.3.6\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `semgrep` from 1.166.0 to 1.168.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/releases\"\u003esemgrep's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.168.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.168.0\"\u003e1.168.0\u003c/a\u003e - 2026-06-24\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded an experimental \u003ccode\u003e--x-dependency-paths\u003c/code\u003e flag to \u003ccode\u003escan\u003c/code\u003e and \u003ccode\u003eci\u003c/code\u003e that includes the full dependency path(s) for transitive supply-chain findings in \u003ccode\u003e--json\u003c/code\u003e and \u003ccode\u003e--sarif\u003c/code\u003e output. (SC-3547)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMalicious supply chain rules are now labeled \u0026quot;Malicious\u0026quot; instead of \u0026quot;Basic\u0026quot; in the scan analysis summary table. (SC-3504)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esemgrep-core no longer depends on libpcre 8.x; libpcre2 10.x is now the sole regex engine. (drop-libpcre)\u003c/li\u003e\n\u003cli\u003eAliengrep (generic mode) now uses the maintained libpcre2 10.x regular-expression library instead of the deprecated libpcre 8.x. Matching behavior is unchanged. (aliengrep-pcre2)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003emetavariable-regex\u003c/code\u003e and \u003ccode\u003emetavariable-comparison\u003c/code\u003e (\u003ccode\u003ere.match()\u003c/code\u003e) runtimes now use the maintained libpcre2 10.x library instead of the deprecated libpcre 8.x. Matching behavior is unchanged. (eval-generic-pcre2)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eRelease v1.167.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.167.0\"\u003e1.167.0\u003c/a\u003e - 2026-06-17\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for more operators for folding for constant propagation, including subtraction, division, bit ops, bit shifts, comparisons, and more. (const-folding)\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003enosemgrep_disabled\u003c/code\u003e field to the scan configuration so the platform can disable \u003ccode\u003enosemgrep\u003c/code\u003e inline ignore comments org-wide for a scan. (APPEX-1122)\u003c/li\u003e\n\u003cli\u003eSemgrep now skips binary files (images, archives, compiled executables,\netc.) during scanning by default, detected via matching file extensions\nto known file-format magic bytes Pass \u003ccode\u003e--no-exclude-binary-files\u003c/code\u003e to\nscan binary files as before. (ENGINE-2708)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esemgrep ci\u003c/code\u003e with \u003ccode\u003e--sarif\u003c/code\u003e now correctly populates the output's \u003ccode\u003eignores\u003c/code\u003e\nfield with nosemgrep-suppressed findings, in accordance with other output\nformatters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6651\"\u003egh-6651\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated the \u003ccode\u003eocaml-tree-sitter-core\u003c/code\u003e submodule to the latest upstream \u003ccode\u003emain\u003c/code\u003e, providing\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eimproved thread-safety\u003c/li\u003e\n\u003cli\u003ebumps the tree-sitter CLI option used from 0.20.6 to 0.20.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(ocaml-tree-sitter-core-bump)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/semgrep/semgrep/blob/v1.168.0/CHANGELOG.md\"\u003esemgrep's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.168.0\"\u003e1.168.0\u003c/a\u003e - 2026-06-24\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded an experimental \u003ccode\u003e--x-dependency-paths\u003c/code\u003e flag to \u003ccode\u003escan\u003c/code\u003e and \u003ccode\u003eci\u003c/code\u003e that includes the full dependency path(s) for transitive supply-chain findings in \u003ccode\u003e--json\u003c/code\u003e and \u003ccode\u003e--sarif\u003c/code\u003e output. (SC-3547)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Changed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMalicious supply chain rules are now labeled \u0026quot;Malicious\u0026quot; instead of \u0026quot;Basic\u0026quot; in the scan analysis summary table. (SC-3504)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003esemgrep-core no longer depends on libpcre 8.x; libpcre2 10.x is now the sole regex engine. (drop-libpcre)\u003c/li\u003e\n\u003cli\u003eAliengrep (generic mode) now uses the maintained libpcre2 10.x regular-expression library instead of the deprecated libpcre 8.x. Matching behavior is unchanged. (aliengrep-pcre2)\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003emetavariable-regex\u003c/code\u003e and \u003ccode\u003emetavariable-comparison\u003c/code\u003e (\u003ccode\u003ere.match()\u003c/code\u003e) runtimes now use the maintained libpcre2 10.x library instead of the deprecated libpcre 8.x. Matching behavior is unchanged. (eval-generic-pcre2)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/semgrep/semgrep/releases/tag/v1.167.0\"\u003e1.167.0\u003c/a\u003e - 2026-06-17\u003c/h2\u003e\n\u003ch3\u003e### Added\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for more operators for folding for constant propagation, including subtraction, division, bit ops, bit shifts, comparisons, and more. (const-folding)\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003enosemgrep_disabled\u003c/code\u003e field to the scan configuration so the platform can disable \u003ccode\u003enosemgrep\u003c/code\u003e inline ignore comments org-wide for a scan. (APPEX-1122)\u003c/li\u003e\n\u003cli\u003eSemgrep now skips binary files (images, archives, compiled executables,\netc.) during scanning by default, detected via matching file extensions\nto known file-format magic bytes Pass \u003ccode\u003e--no-exclude-binary-files\u003c/code\u003e to\nscan binary files as before. (ENGINE-2708)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Fixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003esemgrep ci\u003c/code\u003e with \u003ccode\u003e--sarif\u003c/code\u003e now correctly populates the output's \u003ccode\u003eignores\u003c/code\u003e\nfield with nosemgrep-suppressed findings, in accordance with other output\nformatters. (\u003ca href=\"https://redirect.github.com/semgrep/semgrep/issues/6651\"\u003egh-6651\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e### Infra/Release Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdated the \u003ccode\u003eocaml-tree-sitter-core\u003c/code\u003e submodule to the latest upstream \u003ccode\u003emain\u003c/code\u003e, providing\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eimproved thread-safety\u003c/li\u003e\n\u003cli\u003ebumps the tree-sitter CLI option used from 0.20.6 to 0.20.8.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e(ocaml-tree-sitter-core-bump)\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/semgrep/semgrep/commit/3167f9c4edb5ad588c558e311c5a1a03b7f593da\"\u003e\u003ccode\u003e3167f9c\u003c/code\u003e\u003c/a\u003e chore: release 1.168.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/94ac223eb9fade687c2e044936f5ca370dad08c6\"\u003e\u003ccode\u003e94ac223\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6651\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/fd5e60e96c7d66dcdb43d2c1086f003308d21420\"\u003e\u003ccode\u003efd5e60e\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6602\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/acf763e9d16e31e1ab8c5ece9d4ab55e8f2e3ee3\"\u003e\u003ccode\u003eacf763e\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6655\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/b635c1f9e1816b154d2247e1e605532e53f683f6\"\u003e\u003ccode\u003eb635c1f\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6653\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/b0a3bb4eeb0f55e0f4bd30498294b0e68be390fb\"\u003e\u003ccode\u003eb0a3bb4\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6654\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d03aad013dbdac44d934282d744beabef62851e7\"\u003e\u003ccode\u003ed03aad0\u003c/code\u003e\u003c/a\u003e chore(spacegrep): migrate Comment.ml from libpcre 8.x to libpcre2 10.x (semgr...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/8855bc510dd2712f23f82211ff5fe65650555262\"\u003e\u003ccode\u003e8855bc5\u003c/code\u003e\u003c/a\u003e refactor(docker): do not create duplicate unused artifacts (semgrep/semgrep-p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/51c6552cec03860634f8e451d0af6e6b3ff76cae\"\u003e\u003ccode\u003e51c6552\u003c/code\u003e\u003c/a\u003e refactor(ci): delegate archive-handling to \u003ccode\u003e{download,upload}\u003c/code\u003e-artifact (semg...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/semgrep/semgrep/commit/d9d88135564aff166adcc3622911c997fd224989\"\u003e\u003ccode\u003ed9d8813\u003c/code\u003e\u003c/a\u003e\u003ccode\u003esemgrep/semgrep-proprietary#6652\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/semgrep/semgrep/compare/v1.166.0...v1.168.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/anulum/director-ai/pull/130","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/anulum%2Fdirector-ai/issues/130","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/130/packages"}},{"old_version":"2026.5.20","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-06-22T23:38:26.000Z","version_change":"2026.5.20 → 2026.6.17","issue":{"uuid":"4721378013","node_id":"PR_kwDOSexqaM7paipJ","number":84,"state":"closed","title":"chore(deps): bump the python-deps group across 1 directory with 8 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-29T23:37:51.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-22T23:38:26.000Z","updated_at":"2026-06-29T23:37:53.000Z","time_to_close":604765,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"python-deps","update_count":8,"packages":[{"name":"dash","old_version":"4.2.0","new_version":"4.3.0","repository_url":"https://github.com/plotly/dash"},{"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.15","new_version":"0.15.18","repository_url":"https://github.com/astral-sh/ruff"},{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"coverage","old_version":"7.14.1","new_version":"7.14.3","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"narwhals","old_version":"2.22.0","new_version":"2.22.1","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"selenium","old_version":"4.44.0","new_version":"4.45.0","repository_url":"https://github.com/SeleniumHQ/Selenium"},{"name":"tqdm","old_version":"4.67.3","new_version":"4.68.3","repository_url":"https://github.com/tqdm/tqdm"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-deps group with 8 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [dash](https://github.com/plotly/dash) | `4.2.0` | `4.3.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.15` | `0.15.18` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.5.20` | `2026.6.17` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.14.1` | `7.14.3` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.22.0` | `2.22.1` |\n| [selenium](https://github.com/SeleniumHQ/Selenium) | `4.44.0` | `4.45.0` |\n| [tqdm](https://github.com/tqdm/tqdm) | `4.67.3` | `4.68.3` |\n\n\nUpdates `dash` from 4.2.0 to 4.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/dash/releases\"\u003edash's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.3.0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3796\"\u003e#3796\u003c/a\u003e MCP: Add \u003ccode\u003econfigure_mcp_server()\u003c/code\u003e to toggle which content the MCP server exposes (\u003ccode\u003einclude_layout\u003c/code\u003e, \u003ccode\u003einclude_callbacks\u003c/code\u003e, \u003ccode\u003einclude_clientside_callbacks\u003c/code\u003e, \u003ccode\u003einclude_pages\u003c/code\u003e, \u003ccode\u003eexpose_callback_docstrings\u003c/code\u003e). Only the parameters explicitly passed are updated; omitted parameters retain their current value.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3710\"\u003e#3710\u003c/a\u003e MCP: Framework utilities, types for interacting with layout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3711\"\u003e#3711\u003c/a\u003e MCP: \u003ccode\u003eCallbackAdapter\u003c/code\u003e for representing callback-related data in MCP-friendly format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3712\"\u003e#3712\u003c/a\u003e MCP: \u003ccode\u003eResources\u003c/code\u003e for exposing app layout, components, and pages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3731\"\u003e#3731\u003c/a\u003e MCP: Expose callbacks as \u003ccode\u003eTools\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3747\"\u003e#3747\u003c/a\u003e MCP: Support pattern-matching callbacks in Tools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3748\"\u003e#3748\u003c/a\u003e MCP: Format callback results for LLM consumption (rendered graphs, markdown tables)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3749\"\u003e#3749\u003c/a\u003e MCP: \u003ccode\u003eget_dash_component\u003c/code\u003e Tool and callback execution\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3750\"\u003e#3750\u003c/a\u003e MCP: Server routes, \u003ccode\u003emcp_enabled\u003c/code\u003e function decorator, and Streamable HTTP transport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3766\"\u003e#3766\u003c/a\u003e MCP: Support background callbacks in Tools\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3796\"\u003e#3796\u003c/a\u003e MCP: Remove the \u003ccode\u003emcp_expose_docstrings\u003c/code\u003e \u003ccode\u003eDash()\u003c/code\u003e constructor argument; callback docstring exposure is now controlled via \u003ccode\u003econfigure_mcp_server(expose_callback_docstrings=...)\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3817\"\u003e#3817\u003c/a\u003e Fix background callback context serialisation for non-dict request args on the FastAPI and Quart backends. Fixes \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3816\"\u003e#3816\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3805\"\u003e#3805\u003c/a\u003e Fix FastAPI POST routes deadlock caused by middleware consuming request body. Fixes \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3801\"\u003e#3801\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3813\"\u003e#3813\u003c/a\u003e Fix websockets using incorrect path when deployed behind a proxy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3830\"\u003e#3830\u003c/a\u003e MCP: Respond to the Streamable HTTP \u003ccode\u003eGET\u003c/code\u003e (SSE) request with an empty event stream instead of \u003ccode\u003e405 Method Not Allowed\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.3.0rc0\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3710\"\u003e#3710\u003c/a\u003e MCP: Framework utilities, types for interacting with layout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3711\"\u003e#3711\u003c/a\u003e MCP: \u003ccode\u003eCallbackAdapter\u003c/code\u003e for representing callback-related data in MCP-friendly format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3712\"\u003e#3712\u003c/a\u003e MCP: \u003ccode\u003eResources\u003c/code\u003e for exposing app layout, components, and pages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3731\"\u003e#3731\u003c/a\u003e MCP: Expose callbacks as \u003ccode\u003eTools\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3747\"\u003e#3747\u003c/a\u003e MCP: Support pattern-matching callbacks in Tools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3748\"\u003e#3748\u003c/a\u003e MCP: Format callback results for LLM consumption (rendered graphs, markdown tables)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3749\"\u003e#3749\u003c/a\u003e MCP: \u003ccode\u003eget_dash_component\u003c/code\u003e Tool and callback execution\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3750\"\u003e#3750\u003c/a\u003e MCP: Server routes, \u003ccode\u003emcp_enabled\u003c/code\u003e function decorator, and Streamable HTTP transport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3766\"\u003e#3766\u003c/a\u003e MCP: Support background callbacks in Tools\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/plotly/dash/blob/dev/CHANGELOG.md\"\u003edash's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[4.3.0] - 2026-06-18\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3796\"\u003e#3796\u003c/a\u003e MCP: Add \u003ccode\u003econfigure_mcp_server()\u003c/code\u003e to toggle which content the MCP server exposes (\u003ccode\u003einclude_layout\u003c/code\u003e, \u003ccode\u003einclude_callbacks\u003c/code\u003e, \u003ccode\u003einclude_clientside_callbacks\u003c/code\u003e, \u003ccode\u003einclude_pages\u003c/code\u003e, \u003ccode\u003eexpose_callback_docstrings\u003c/code\u003e). Only the parameters explicitly passed are updated; omitted parameters retain their current value.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3796\"\u003e#3796\u003c/a\u003e MCP: Remove the \u003ccode\u003emcp_expose_docstrings\u003c/code\u003e \u003ccode\u003eDash()\u003c/code\u003e constructor argument; callback docstring exposure is now controlled via \u003ccode\u003econfigure_mcp_server(expose_callback_docstrings=...)\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3817\"\u003e#3817\u003c/a\u003e Fix background callback context serialisation for non-dict request args on the FastAPI and Quart backends. Fixes \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3816\"\u003e#3816\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3805\"\u003e#3805\u003c/a\u003e Fix FastAPI POST routes deadlock caused by middleware consuming request body. Fixes \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3801\"\u003e#3801\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3813\"\u003e#3813\u003c/a\u003e Fix websockets using incorrect path when deployed behind a proxy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3830\"\u003e#3830\u003c/a\u003e MCP: Respond to the Streamable HTTP \u003ccode\u003eGET\u003c/code\u003e (SSE) request with an empty event stream instead of \u003ccode\u003e405 Method Not Allowed\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[4.3.0rc0] - 2026-05-21\u003c/h2\u003e\n\u003ch2\u003eAdded\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3710\"\u003e#3710\u003c/a\u003e MCP: Framework utilities, types for interacting with layout\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3711\"\u003e#3711\u003c/a\u003e MCP: \u003ccode\u003eCallbackAdapter\u003c/code\u003e for representing callback-related data in MCP-friendly format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3712\"\u003e#3712\u003c/a\u003e MCP: \u003ccode\u003eResources\u003c/code\u003e for exposing app layout, components, and pages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3731\"\u003e#3731\u003c/a\u003e MCP: Expose callbacks as \u003ccode\u003eTools\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3747\"\u003e#3747\u003c/a\u003e MCP: Support pattern-matching callbacks in Tools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3748\"\u003e#3748\u003c/a\u003e MCP: Format callback results for LLM consumption (rendered graphs, markdown tables)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3749\"\u003e#3749\u003c/a\u003e MCP: \u003ccode\u003eget_dash_component\u003c/code\u003e Tool and callback execution\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3750\"\u003e#3750\u003c/a\u003e MCP: Server routes, \u003ccode\u003emcp_enabled\u003c/code\u003e function decorator, and Streamable HTTP transport\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/plotly/dash/pull/3766\"\u003e#3766\u003c/a\u003e MCP: Support background callbacks in Tools\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/plotly/dash/commit/d95db60484a36eeeb41c2dd91f01c5f2c0315354\"\u003e\u003ccode\u003ed95db60\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3832\"\u003e#3832\u003c/a\u003e from plotly/master-4.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/904e5edfa0ab54a6e7e09f465ae4ca718705ef08\"\u003e\u003ccode\u003e904e5ed\u003c/code\u003e\u003c/a\u003e ci: skip Typing Tests on PRs targeting master\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/b3babe43725ee6afcb0f5d5af82853729628509e\"\u003e\u003ccode\u003eb3babe4\u003c/code\u003e\u003c/a\u003e build artifacts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/0c89b98fb7ce226923d782e39a3646d68f10a072\"\u003e\u003ccode\u003e0c89b98\u003c/code\u003e\u003c/a\u003e Merge branch 'dev' into master-4.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/86d02b47bf796c0ea3ce301d0378808fdbb41ad8\"\u003e\u003ccode\u003e86d02b4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3831\"\u003e#3831\u003c/a\u003e from plotly/release/4.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/16e09f2aecea7516a46b3a3ddd590fa98c5c8504\"\u003e\u003ccode\u003e16e09f2\u003c/code\u003e\u003c/a\u003e Version bump of component suites\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/adb6bb2ddc69065b5204e78f5d2e8c26e5020dce\"\u003e\u003ccode\u003eadb6bb2\u003c/code\u003e\u003c/a\u003e bump version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/27b8c456f7c34306eb0d7c4b4d1770a029d5125d\"\u003e\u003ccode\u003e27b8c45\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/dash/issues/3807\"\u003e#3807\u003c/a\u003e from plotly/mcp\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/7fe7a32060b7321566ec0982e7dda58be19fc7dd\"\u003e\u003ccode\u003e7fe7a32\u003c/code\u003e\u003c/a\u003e Fix failing mcp test\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/dash/commit/ff4d66dfffec0ed8d97c58e5a6a15bc8bf839d40\"\u003e\u003ccode\u003eff4d66d\u003c/code\u003e\u003c/a\u003e Merge remote-tracking branch 'origin/dev' into mcp\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/dash/compare/v4.2.0...v4.3.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.15 to 0.15.18\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.18\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle nested \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25791\"\u003e#25791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop displaying severity in output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26050\"\u003e#26050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25937\"\u003e#25937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in LSP and playground diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26058\"\u003e#26058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Prevent property docstrings starting with verbs (\u003ccode\u003eD421\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23775\"\u003e#23775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Extend \u003ccode\u003ePYI033\u003c/code\u003e to Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect equivalent numeric mapping keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26009\"\u003e#26009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect mapping keys equivalent to booleans (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25982\"\u003e#25982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect repeated signed and complex dictionary keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26007\"\u003e#26007\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-pyi\u003c/code\u003e] Rename \u003ccode\u003ePYI033\u003c/code\u003e to \u003ccode\u003elegacy-type-comment\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e for call keywords (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25999\"\u003e#25999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline parser recovery context checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26038\"\u003e#26038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch parser keywords as bytes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26037\"\u003e#26037\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMove value parsing out of lexing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25360\"\u003e#25360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender subdiagnostics and secondary annotations as related information (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26011\"\u003e#26011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate fix availability for always-fixable rules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26091\"\u003e#26091\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add fix safety section (\u003ccode\u003eTID252\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17491\"\u003e#17491\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eParser\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003e__debug__\u003c/code\u003e lambda parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26022\"\u003e#26022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_\u003c/code\u003e as a match-pattern target (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25977\"\u003e#25977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject multiple starred names in sequence patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25976\"\u003e#25976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject parenthesized star imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26021\"\u003e#26021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject starred comprehension targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26023\"\u003e#26023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unparenthesized generator expressions in class bases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25978\"\u003e#25978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eyield\u003c/code\u003e expressions after commas (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26024\"\u003e#26024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate function type parameter default order (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25981\"\u003e#25981\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.18\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-06-18.\u003c/p\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eHandle nested \u003ccode\u003eruff:ignore\u003c/code\u003e comments (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25791\"\u003e#25791\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eStop displaying severity in output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26050\"\u003e#26050\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in CLI output (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25937\"\u003e#25937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse human-readable names in LSP and playground diagnostics (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26058\"\u003e#26058\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003epydocstyle\u003c/code\u003e] Prevent property docstrings starting with verbs (\u003ccode\u003eD421\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/23775\"\u003e#23775\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-pyi\u003c/code\u003e] Extend \u003ccode\u003ePYI033\u003c/code\u003e to Python files (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDetect equivalent numeric mapping keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26009\"\u003e#26009\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect mapping keys equivalent to booleans (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25982\"\u003e#25982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDetect repeated signed and complex dictionary keys (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26007\"\u003e#26007\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-pyi\u003c/code\u003e] Rename \u003ccode\u003ePYI033\u003c/code\u003e to \u003ccode\u003elegacy-type-comment\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePerformance\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse \u003ccode\u003eThinVec\u003c/code\u003e for call keywords (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25999\"\u003e#25999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInline parser recovery context checks (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26038\"\u003e#26038\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMatch parser keywords as bytes (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26037\"\u003e#26037\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eMove value parsing out of lexing (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25360\"\u003e#25360\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eServer\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRender subdiagnostics and secondary annotations as related information (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26011\"\u003e#26011\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate fix availability for always-fixable rules (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26091\"\u003e#26091\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[\u003ccode\u003eflake8-tidy-imports\u003c/code\u003e] Add fix safety section (\u003ccode\u003eTID252\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/17491\"\u003e#17491\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eParser\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003e__debug__\u003c/code\u003e lambda parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26022\"\u003e#26022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003e_\u003c/code\u003e as a match-pattern target (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25977\"\u003e#25977\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject multiple starred names in sequence patterns (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25976\"\u003e#25976\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject parenthesized star imports (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26021\"\u003e#26021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject starred comprehension targets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26023\"\u003e#26023\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unparenthesized generator expressions in class bases (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25978\"\u003e#25978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eyield\u003c/code\u003e expressions after commas (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/26024\"\u003e#26024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate function type parameter default order (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/pull/25981\"\u003e#25981\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/6686f63404207bfdffe8ab0acb25da72c3432190\"\u003e\u003ccode\u003e6686f63\u003c/code\u003e\u003c/a\u003e Bump 0.15.18 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26135\"\u003e#26135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/efbb7325ff5bb92b0a0c0a0efa0ac94e439ee367\"\u003e\u003ccode\u003eefbb732\u003c/code\u003e\u003c/a\u003e [ty] Suggest keyword-only arguments between variadic parameters (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26134\"\u003e#26134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c256d5f573e66612556061bfd0af527136a23c30\"\u003e\u003ccode\u003ec256d5f\u003c/code\u003e\u003c/a\u003e [ty] Support \u003ccode\u003eAnnotated[Any, ...]\u003c/code\u003e as a class base (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26133\"\u003e#26133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/19a4bea1af5b252798d85696f2f397dae91d303d\"\u003e\u003ccode\u003e19a4bea\u003c/code\u003e\u003c/a\u003e [flake8-pyi] Rename PYI033 to legacy-type-comment (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26131\"\u003e#26131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/1d9866cbd673dc68153ad162465e979c47e62a96\"\u003e\u003ccode\u003e1d9866c\u003c/code\u003e\u003c/a\u003e Bump ecosystem-analyzer commit (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26130\"\u003e#26130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/8656c731dded1e91c0e2713405e43bb2c4eb53bf\"\u003e\u003ccode\u003e8656c73\u003c/code\u003e\u003c/a\u003e [ty] Compact indexed AST node storage (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/25998\"\u003e#25998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/c17c8d9a060f839c0f9b69c69b85d3802ec5dfdf\"\u003e\u003ccode\u003ec17c8d9\u003c/code\u003e\u003c/a\u003e [ty] Garbage-collect cached constraint sets (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26116\"\u003e#26116\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/ef0fb8fa264035974e57fda59e2baf196ec1fb9e\"\u003e\u003ccode\u003eef0fb8f\u003c/code\u003e\u003c/a\u003e [ty] Fix bound TypeVar default cycle recovery (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26124\"\u003e#26124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/b83c02489df8bccda7313a2cdd8369c9b5d1b002\"\u003e\u003ccode\u003eb83c024\u003c/code\u003e\u003c/a\u003e [flake8-pyi] Extend PYI033 to Python files in preview (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26129\"\u003e#26129\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/ruff/commit/e8a5e38858558a68e94397152fd735cacb6ea3b4\"\u003e\u003ccode\u003ee8a5e38\u003c/code\u003e\u003c/a\u003e Update Rust crate zip to v8 (\u003ca href=\"https://redirect.github.com/astral-sh/ruff/issues/26078\"\u003e#26078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/ruff/compare/0.15.15...0.15.18\"\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 `coverage` from 7.14.1 to 7.14.3\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.3 — 2026-06-22\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the default \u003ccode\u003e...\u003c/code\u003e exclusion rule now also matches function bodies\nwhose closing return-type bracket is on its own line (for example, after a\nlong \u003ccode\u003e-\u0026gt; dict[ ... ]\u003c/code\u003e annotation that a formatter has split over multiple\nlines). Closes \u003ccode\u003eissue 2185\u003c/code\u003e\u003cem\u003e, thanks \u003ccode\u003eMengjia Shang \u0026lt;pull 2196_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: On 3.13t, we incorrectly issued \u003ccode\u003eCouldn't import C tracer\u003c/code\u003e errors.\nWe can't import the C tracer because in 7.14.2 we stopped shipping compiled\nwheels for 3.13t. Thanks, \u003ccode\u003eHugo van Kemenade \u0026lt;pull 2203_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2185: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2185\"\u003ecoveragepy/coveragepy#2185\u003c/a\u003e\n.. _pull 2196: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2196\"\u003ecoveragepy/coveragepy#2196\u003c/a\u003e\n.. _pull 2203: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2203\"\u003ecoveragepy/coveragepy#2203\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-2:\u003c/p\u003e\n\u003ch2\u003eVersion 7.14.2 — 2026-06-20\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: some messages were being written to stdout, making \u003ccode\u003ecoverage json -o -\u003c/code\u003e useless for capturing JSON output. Now messages are written to stderr,\nfixing \u003ccode\u003eissue 2197\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003eCoverageData\u003c/code\u003e kept one SQLite connection per thread that recorded\ncoverage, but never closed them when those threads terminated. On long runs\nwith many short-lived threads this leaked one file descriptor per dead\nthread, eventually failing with \u003ccode\u003eOSError: [Errno 24] Too many open files\u003c/code\u003e.\nConnections belonging to terminated threads are now closed and dropped.\nFixes \u003ccode\u003eissue 2192\u003c/code\u003e\u003cem\u003e.  Thanks, \u003ccode\u003eMatthew Lloyd \u0026lt;pull 2193_\u0026gt;\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: when using sys.monitoring, we were assuming we could use the\n\u003ccode\u003eCOVERAGE_ID\u003c/code\u003e tool id.  But other tools might also assume they could use\nthat id.  Pre-allocated ids don't really make sense, so now we search for a\nusable one instead. Fixes \u003ccode\u003eissue 2187\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFollowing \u003ccode\u003ethe advice of cibuildwheel \u0026lt;no-13t_\u0026gt;\u003c/code\u003e_, we no longer distribute\nwheels for Python 3.13 free-threaded.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2187: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2187\"\u003ecoveragepy/coveragepy#2187\u003c/a\u003e\n.. _issue 2192: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2192\"\u003ecoveragepy/coveragepy#2192\u003c/a\u003e\n.. _pull 2193: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2193\"\u003ecoveragepy/coveragepy#2193\u003c/a\u003e\n.. _issue 2197: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2197\"\u003ecoveragepy/coveragepy#2197\u003c/a\u003e\n.. _no-13t: \u003ca href=\"https://py-free-threading.github.io/ci/#building-free-threaded-wheels-with-cibuildwheel\"\u003ehttps://py-free-threading.github.io/ci/#building-free-threaded-wheels-with-cibuildwheel\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-1:\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/22f13eacc2258aee53198b6176db1ca89c32a12e\"\u003e\u003ccode\u003e22f13ea\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2ca4e5fe61a551fc55e48428c8140cb7d325566a\"\u003e\u003ccode\u003e2ca4e5f\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/01d714e5cb457177e999e78fde0c438283f7e4db\"\u003e\u003ccode\u003e01d714e\u003c/code\u003e\u003c/a\u003e docs: add changelog entry for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2203\"\u003e#2203\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f36248d7ba313734d4fcf3d6eab713b5eba2c259\"\u003e\u003ccode\u003ef36248d\u003c/code\u003e\u003c/a\u003e fix: don't emit 'Couldn't import C tracer' warning for 3.13t (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2203\"\u003e#2203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/86d73d1c4c60bdb2ea03f982cd4e33c77879ba77\"\u003e\u003ccode\u003e86d73d1\u003c/code\u003e\u003c/a\u003e docs: thanks, Mengjia Shang\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/3d4ae3cb7c77f7521d91200a1e5de13425bbdff4\"\u003e\u003ccode\u003e3d4ae3c\u003c/code\u003e\u003c/a\u003e docs: add the \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2196\"\u003e#2196\u003c/a\u003e pr link to CHANGES\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/f4b2b4d35e1b7cd8f33f1ee88d354b0debeeed08\"\u003e\u003ccode\u003ef4b2b4d\u003c/code\u003e\u003c/a\u003e fix: exclude \u003ccode\u003e...\u003c/code\u003e bodies after multi-line return-type annotations (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2185\"\u003e#2185\u003c/a\u003e) (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1980ed0730956f0cc179e8568e1c8ee848f2d42b\"\u003e\u003ccode\u003e1980ed0\u003c/code\u003e\u003c/a\u003e chore: bump sigstore/gh-action-sigstore-python (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2201\"\u003e#2201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/bca3217a1dadf35fa1d444722ec9f05dd5819089\"\u003e\u003ccode\u003ebca3217\u003c/code\u003e\u003c/a\u003e build: since we don't ship 3.13t, don't test it\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/77550d83b2f35818a1ca8931289b81d161222031\"\u003e\u003ccode\u003e77550d8\u003c/code\u003e\u003c/a\u003e docs: oops, mismatched pull requests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.1...7.14.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `narwhals` from 2.22.0 to 2.22.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/narwhals-dev/narwhals/releases\"\u003enarwhals's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eNarwhals v2.22.1\u003c/h2\u003e\n\u003ch2\u003eChanges\u003c/h2\u003e\n\u003ch2\u003e🐞 Bug fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: preserve fireducks functionality (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3672\"\u003e#3672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix(polars): Backport \u003ccode\u003eis_close\u003c/code\u003e for \u003ccode\u003eDecimal\u003c/code\u003e dtype and \u003ccode\u003ejoin(how={\u0026quot;semi\u0026quot;, \u0026quot;anti\u0026quot;})\u003c/code\u003e on null's (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3660\"\u003e#3660\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix: Include test data in sdist (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e📦 Build system\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix: Include test data in sdist (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThank you to all our contributors for making this release possible!\n\u003ca href=\"https://github.com/FBruzzesi\"\u003e\u003ccode\u003e@​FBruzzesi\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/MarcoGorelli\"\u003e\u003ccode\u003e@​MarcoGorelli\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/27bf8dbac2b44d048e26b5c9042fe35575878a4d\"\u003e\u003ccode\u003e27bf8db\u003c/code\u003e\u003c/a\u003e release: Bump version to 2.22.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/125ed1e149a09ebc861c20b8595eb8df42b08b4a\"\u003e\u003ccode\u003e125ed1e\u003c/code\u003e\u003c/a\u003e fix: inplace deprecation warning from pandas in \u003ccode\u003edrop\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3675\"\u003e#3675\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/ebd57ae4ec18c2628c1fb9f82f26ed7099caf45f\"\u003e\u003ccode\u003eebd57ae\u003c/code\u003e\u003c/a\u003e fix: preserve fireducks functionality (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3672\"\u003e#3672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/8da0d890a3153182136427844aa4c542b2c86c60\"\u003e\u003ccode\u003e8da0d89\u003c/code\u003e\u003c/a\u003e fix(polars): Backport \u003ccode\u003eis_close\u003c/code\u003e for \u003ccode\u003eDecimal\u003c/code\u003e dtype and `join(how={\u0026quot;semi\u0026quot;, \u0026quot;...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/6db4d00049c8b9f307943cb913209923c25387d4\"\u003e\u003ccode\u003e6db4d00\u003c/code\u003e\u003c/a\u003e fix: Include test data in sdist (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3665\"\u003e#3665\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/narwhals-dev/narwhals/commit/1eb327f0d80dd1fdc659ef7b49c554e2f3b95a9d\"\u003e\u003ccode\u003e1eb327f\u003c/code\u003e\u003c/a\u003e release: Bump version to 2.22.0 (\u003ca href=\"https://redirect.github.com/narwhals-dev/narwhals/issues/3663\"\u003e#3663\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/narwhals-dev/narwhals/compare/v2.22.0...v2.22.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `selenium` from 4.44.0 to 4.45.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/SeleniumHQ/Selenium/releases\"\u003eselenium's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eSelenium 4.45.0\u003c/h2\u003e\n\u003ch2\u003eDetailed Changelogs by Component\u003c/h2\u003e\n\u003cp\u003e\u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG\"\u003eJava\u003c/a\u003e\u003c/strong\u003e     |    \u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES\"\u003ePython\u003c/a\u003e\u003c/strong\u003e     |    \u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG\"\u003eDotNet\u003c/a\u003e\u003c/strong\u003e     |    \u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES\"\u003eRuby\u003c/a\u003e\u003c/strong\u003e     |    \u003c!-- raw HTML omitted --\u003e \u003cstrong\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/selenium-webdriver/CHANGES.md\"\u003eJavaScript\u003c/a\u003e\u003c/strong\u003e\n\u003c!-- raw HTML omitted --\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[build] derive PR diff base from HEAD^1 instead of trunk tip by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17438\"\u003eSeleniumHQ/selenium#17438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] setup trusted publishing from Github to npmrc by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17445\"\u003eSeleniumHQ/selenium#17445\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] generate release notes from previous minor release tag by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17449\"\u003eSeleniumHQ/selenium#17449\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] fix when to update lock files during the release process by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17450\"\u003eSeleniumHQ/selenium#17450\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[java] remove deprecated logging classes by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17453\"\u003eSeleniumHQ/selenium#17453\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[grid] Close pre-handshake race in WebSocket proxy by \u003ca href=\"https://github.com/shs96c\"\u003e\u003ccode\u003e@​shs96c\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17435\"\u003eSeleniumHQ/selenium#17435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[JavaScript] Correct handling for older browsers and missing casing by \u003ca href=\"https://github.com/AutomatedTester\"\u003e\u003ccode\u003e@​AutomatedTester\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17451\"\u003eSeleniumHQ/selenium#17451\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse pyproject for Python runtime deps lock input by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17452\"\u003eSeleniumHQ/selenium#17452\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rb] deprecate curb http client support by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17443\"\u003eSeleniumHQ/selenium#17443\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[javascript] Migrate find-elements atom from Closure to TypeScript by \u003ca href=\"https://github.com/AutomatedTester\"\u003e\u003ccode\u003e@​AutomatedTester\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17458\"\u003eSeleniumHQ/selenium#17458\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[py] replace rules_python sphinxdocs with local sphinx_docs rule by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17461\"\u003eSeleniumHQ/selenium#17461\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] Configure Renovate dashboard approval by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17464\"\u003eSeleniumHQ/selenium#17464\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[js] update vulnerable dependency with a range by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17466\"\u003eSeleniumHQ/selenium#17466\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] remove duplicated grid ui tests by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17468\"\u003eSeleniumHQ/selenium#17468\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] update java graphpql dependency by filtering out bad reference by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17469\"\u003eSeleniumHQ/selenium#17469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rb] upgrade to steep 2.0 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17470\"\u003eSeleniumHQ/selenium#17470\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rust] update dependencies by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17472\"\u003eSeleniumHQ/selenium#17472\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] update GitHub Actions to latest major versions by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17475\"\u003eSeleniumHQ/selenium#17475\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] update dev dependencies by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17474\"\u003eSeleniumHQ/selenium#17474\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] fix template caching by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17476\"\u003eSeleniumHQ/selenium#17476\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] update system.text.json to 8.0.6 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17477\"\u003eSeleniumHQ/selenium#17477\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[js] update dev dependencies by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17479\"\u003eSeleniumHQ/selenium#17479\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] upgrade paket from v9 to v10 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17481\"\u003eSeleniumHQ/selenium#17481\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump bazel version to 9.1 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17480\"\u003eSeleniumHQ/selenium#17480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rust] update zip to v8 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17485\"\u003eSeleniumHQ/selenium#17485\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[js] update eslint to v10 with fixes by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17482\"\u003eSeleniumHQ/selenium#17482\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rb] Update ruby to 3.3.9 by \u003ca href=\"https://github.com/aguspe\"\u003e\u003ccode\u003e@​aguspe\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17484\"\u003eSeleniumHQ/selenium#17484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] include snupkg files when packaging things up and allow the use of sourcelink by \u003ca href=\"https://github.com/AutomatedTester\"\u003e\u003ccode\u003e@​AutomatedTester\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17467\"\u003eSeleniumHQ/selenium#17467\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] update download-artifact to v8 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17493\"\u003eSeleniumHQ/selenium#17493\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] run format against slnx instead of looping csproj by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17483\"\u003eSeleniumHQ/selenium#17483\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump low-risk Bazel module dependencies by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17494\"\u003eSeleniumHQ/selenium#17494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[rust] update reqwest to 0.13 by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17488\"\u003eSeleniumHQ/selenium#17488\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] [build] Fix remote linkage in SourceLink by \u003ca href=\"https://github.com/nvborisenko\"\u003e\u003ccode\u003e@​nvborisenko\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17495\"\u003eSeleniumHQ/selenium#17495\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] remove renovate update requests pending work done in \u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17427\"\u003e#17427\u003c/a\u003e by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17498\"\u003eSeleniumHQ/selenium#17498\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[dotnet] [build] Support deterministic build output by \u003ca href=\"https://github.com/nvborisenko\"\u003e\u003ccode\u003e@​nvborisenko\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17497\"\u003eSeleniumHQ/selenium#17497\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump ruby versions to latest patch releases by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17496\"\u003eSeleniumHQ/selenium#17496\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[js] remove npm dependency by using bazel for everything by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17499\"\u003eSeleniumHQ/selenium#17499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump rules_jvm_external by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17501\"\u003eSeleniumHQ/selenium#17501\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] bump rules_closure version by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17500\"\u003eSeleniumHQ/selenium#17500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[build] clarify dependency pin and update tasks by \u003ca href=\"https://github.com/titusfortner\"\u003e\u003ccode\u003e@​titusfortner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/SeleniumHQ/selenium/pull/17463\"\u003eSeleniumHQ/selenium#17463\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/SeleniumHQ/selenium/commit/cd6a3cdfca6970f62e5bc8344109d0fe0e2af05e\"\u003e\u003ccode\u003ecd6a3cd\u003c/code\u003e\u003c/a\u003e [build] Prepare for release of selenium-4.45.0 (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17680\"\u003e#17680\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/15fad06cba4d0eb577bf3891954ecaf81e9a11d8\"\u003e\u003ccode\u003e15fad06\u003c/code\u003e\u003c/a\u003e [build] Automated Browser Version Update (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17679\"\u003e#17679\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/cb9b6fdbabdc1ed68a8bdbf31a4222c0396fe2fd\"\u003e\u003ccode\u003ecb9b6fd\u003c/code\u003e\u003c/a\u003e [grid] Add support Redis-backed for SessionQueue (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17678\"\u003e#17678\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/18bb1d97d3db196522aa9b3873a350dc40d3ccb8\"\u003e\u003ccode\u003e18bb1d9\u003c/code\u003e\u003c/a\u003e [py] terminate driver service process when start() fails to connect (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17651\"\u003e#17651\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/b3164ef7d071b5add6750d686ffbae1b936cadf0\"\u003e\u003ccode\u003eb3164ef\u003c/code\u003e\u003c/a\u003e [grid] add HtmlUnit browser logo to Grid UI (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17656\"\u003e#17656\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/bb741bd07b1c5e36054328627903b4507eaca9f5\"\u003e\u003ccode\u003ebb741bd\u003c/code\u003e\u003c/a\u003e [build] Automated Browser Version Update (\u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17658\"\u003e#17658\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/887237c468022cb5e4637aa98404fac2de0c8d23\"\u003e\u003ccode\u003e887237c\u003c/code\u003e\u003c/a\u003e [py] translate continue_request/continue_response kwargs to BiDi wire format ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/f53de51c263c5ab0e598253a46286777a794ede0\"\u003e\u003ccode\u003ef53de51\u003c/code\u003e\u003c/a\u003e [rb] run minimize test on linux now that \u003ca href=\"https://redirect.github.com/SeleniumHQ/Selenium/issues/17644\"\u003e#17644\u003c/a\u003e fixed fluxbox startup\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/3f37cce5cd7be6500ba90f44c994e140e27e3108\"\u003e\u003ccode\u003e3f37cce\u003c/code\u003e\u003c/a\u003e [rb] set window state before each window test instead of resetting driver\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/SeleniumHQ/selenium/commit/2bfb9904f65649d7bcb6b4a678ac37c9909d2d22\"\u003e\u003ccode\u003e2bfb990\u003c/code\u003e\u003c/a\u003e [rb] skip Safari double_click action tests\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/SeleniumHQ/Selenium/compare/selenium-4.44.0...selenium-4.45.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tqdm` from 4.67.3 to 4.68.3\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.3 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eutils\u003c/code\u003e: delay \u003ccode\u003eos.get_terminal_size\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1763\"\u003e#1763\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eautonotebook\u003c/code\u003e: support QtConsole, Spyder, JupyterLite (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1763\"\u003e#1763\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1628\"\u003e#1628\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1559\"\u003e#1559\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1283\"\u003e#1283\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1098\"\u003e#1098\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/512\"\u003e#512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eminor docs updates\n\u003cul\u003e\n\u003cli\u003efix typo (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1762\"\u003e#1762\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euse \u003ccode\u003egit-fame\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003emisc minor framework updates\n\u003cul\u003e\n\u003cli\u003efix \u0026amp; update CI build\u003c/li\u003e\n\u003cli\u003epre-commit: add docs \u0026amp; metadata generation\u003c/li\u003e\n\u003cli\u003emove \u003ccode\u003etox.ini\u003c/code\u003e -\u0026gt; \u003ccode\u003epyproject.toml\u003c/code\u003e, move \u003ccode\u003etox-gh-actions\u003c/code\u003e -\u0026gt; \u003ccode\u003etox-gh\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eadd Python 3.14, drop 3.7 support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.68.2 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003erevert accidental change to \u003ccode\u003eascii\u003c/code\u003e default (fixes \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eUnicodeEncodeError: 'charmap' codec can't encode characters in position 6-7: character maps to \u0026lt;undefined\u0026gt;\u003c/code\u003e can be fixed by installing \u003ccode\u003etqdm!=4.68.0,!=4.68.1\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003emisc docs updates\n\u003cul\u003e\n\u003cli\u003efix links\u003c/li\u003e\n\u003cli\u003ereplace stray \u003ccode\u003erst\u003c/code\u003e -\u0026gt; \u003ccode\u003emd\u003c/code\u003e syntax\u003c/li\u003e\n\u003cli\u003econsistent \u0026quot;progress bar\u0026quot; terminology (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1737\"\u003e#1737\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003etests: fix coverage (fixes \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.68.1 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eset name of monitor thread (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1669\"\u003e#1669\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1752\"\u003e#1752\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1435\"\u003e#1435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efix monitor thread \u003ccode\u003eatexit\u003c/code\u003e deadlock (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1751\"\u003e#1751\u003c/a\u003e \u0026lt;- \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/528\"\u003e#528\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/627\"\u003e#627\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1435\"\u003e#1435\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1564\"\u003e#1564\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003edocs: minor copyediting\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003etqdm v4.68.0 stable\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eutils\u003c/code\u003e: simplify terminal size detection (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003econtrib\u003c/code\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eitertools\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1760\"\u003e#1760\u003c/a\u003e)\n\u003cul\u003e\n\u003cli\u003eadd \u003ccode\u003echain\u003c/code\u003e, \u003ccode\u003epermutations\u003c/code\u003e, \u003ccode\u003ecombinations\u003c/code\u003e, \u003ccode\u003ecombinations_with_replacement\u003c/code\u003e, \u003ccode\u003ebatched\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eadd \u003ccode\u003eproduct(repeat=1)\u003c/code\u003e keyword argument (\u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1428\"\u003e#1428\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003ediscord\u003c/code\u003e, \u003ccode\u003etelegram\u003c/code\u003e error handling\u003c/li\u003e\n\u003cli\u003efix \u003ccode\u003ediscord\u003c/code\u003e, \u003ccode\u003eslack\u003c/code\u003e, \u003ccode\u003etelegram\u003c/code\u003e format for \u003ccode\u003etotal=None\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003esoft-deprecate \u003ccode\u003etqdm.utils.envwrap\u003c/code\u003e -\u0026gt; \u003ca href=\"https://github.com/tqdm/envwrap\"\u003e\u003ccode\u003eenvwrap\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebenchmarks: fix \u003ccode\u003easv\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003emisc linting\u003c/li\u003e\n\u003cli\u003emisc framework updates\n\u003cul\u003e\n\u003cli\u003eCI: migrate manual job to \u003ccode\u003epre-commit.ci\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ebump workflow actions \u0026amp; pre-commit hooks\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/9aff6090b6fa98c88a2dbff8bd9e2a68d9a99c1b\"\u003e\u003ccode\u003e9aff609\u003c/code\u003e\u003c/a\u003e bump version, merge pull request \u003ca href=\"https://redirect.github.com/tqdm/tqdm/issues/1763\"\u003e#1763\u003c/a\u003e from tqdm/jupyterlite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/9872f80e0d9ceb8377b45c714ec8f6ae66bf9ef9\"\u003e\u003ccode\u003e9872f80\u003c/code\u003e\u003c/a\u003e drop date from snap version str to fix pydantic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/b82933405f6dc19dd8f667be57fd2058a00f75c7\"\u003e\u003ccode\u003eb829334\u003c/code\u003e\u003c/a\u003e support QtConsole, Spyder, JupyterLite\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/6fa4867b27dd4852204aa13f73300db41791cd46\"\u003e\u003ccode\u003e6fa4867\u003c/code\u003e\u003c/a\u003e delay os.get_terminal_size\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/748e107287c9a66e3a366cd5366bd9a8bcbe33ae\"\u003e\u003ccode\u003e748e107\u003c/code\u003e\u003c/a\u003e lint\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/e6e29eb7a191d366d21b93817c6de3857b664367\"\u003e\u003ccode\u003ee6e29eb\u003c/code\u003e\u003c/a\u003e move tox.ini -\u0026gt; pyproject.toml\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/617e4faf67d6cc59d42e3b2665b0c1199a665db4\"\u003e\u003ccode\u003e617e4fa\u003c/code\u003e\u003c/a\u003e tox-gh-actions -\u0026gt; tox-gh\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/c49c50d83124e514d2b6bb549661ff1e2fa44504\"\u003e\u003ccode\u003ec49c50d\u003c/code\u003e\u003c/a\u003e add python 3.14, drop python 3.7 support\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/fa2bcdb4ad68d4e95bd49460d8d590451cf478ba\"\u003e\u003ccode\u003efa2bcdb\u003c/code\u003e\u003c/a\u003e pre-commit: tqdm.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tqdm/tqdm/commit/1ec798811a960294d74d42d35b6614e3273e9fe3\"\u003e\u003ccode\u003e1ec7988\u003c/code\u003e\u003c/a\u003e auto git-fame\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tqdm/tqdm/compare/v4.67.3...v4.68.3\"\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/BrunoFurlanetto/nirspy/pull/84","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/BrunoFurlanetto%2Fnirspy/issues/84","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/84/packages"}},{"old_version":"2026.2.25","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-06-22T03:11:15.000Z","version_change":"2026.2.25 → 2026.6.17","issue":{"uuid":"4713066524","node_id":"PR_kwDOSzORUs7o-9Bn","number":13,"state":"open","title":"deps(backend): bump the patch-and-minor group across 1 directory with 7 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-06-22T03:11:15.000Z","updated_at":"2026-06-22T03:11:16.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(backend): bump","group_name":"patch-and-minor","update_count":7,"packages":[{"name":"pyjwt","old_version":"2.12.0","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"pymysql","old_version":"1.1.2","new_version":"1.2.0","repository_url":"https://github.com/PyMySQL/PyMySQL"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"},{"name":"idna","old_version":"3.15","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"faker","old_version":"40.13.0","new_version":"40.23.0","repository_url":"https://github.com/joke2k/faker"},{"name":"pdfplumber","old_version":"0.11.9","new_version":"0.11.10","repository_url":"https://github.com/jsvine/pdfplumber"}],"path":null,"ecosystem":"pip"},"body":"Bumps the patch-and-minor group with 7 updates in the /backend directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.0` | `2.13.0` |\n| [pymysql](https://github.com/PyMySQL/PyMySQL) | `1.1.2` | `1.2.0` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.6.17` |\n| [idna](https://github.com/kjd/idna) | `3.15` | `3.18` |\n| [faker](https://github.com/joke2k/faker) | `40.13.0` | `40.23.0` |\n| [pdfplumber](https://github.com/jsvine/pdfplumber) | `0.11.9` | `0.11.10` |\n\n\nUpdates `pyjwt` from 2.12.0 to 2.13.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jpadilla/pyjwt/releases\"\u003epyjwt's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.13.0\u003c/h2\u003e\n\u003ch1\u003ePyJWT 2.13.0 — Security Release\u003c/h1\u003e\n\u003cp\u003eThis release bundles five security fixes plus three additional hardening / spec-compliance changes. We recommend all users upgrade.\u003c/p\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\"\u003e\u003ccode\u003eGHSA-xgmm-8j9v-c9wx\u003c/code\u003e\u003c/a\u003e — JWK JSON accepted as HMAC secret (algorithm confusion).\u003c/strong\u003e \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e previously rejected PEM- and SSH-formatted asymmetric keys but did not catch a JWK passed as a raw JSON string. In a verifier configured with both symmetric and asymmetric algorithms in \u003ccode\u003ealgorithms=[…]\u003c/code\u003e and a raw-JSON JWK as the key, an attacker could forge HS256 tokens using the JWK text as the HMAC secret. The guard has been extended to reject any JWK-shaped JSON. \u003cem\u003eReported by \u003ca href=\"https://github.com/aradona91\"\u003e\u003ccode\u003e@​aradona91\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\"\u003e\u003ccode\u003eGHSA-jq35-7prp-9v3f\u003c/code\u003e\u003c/a\u003e — Algorithm allow-list bypass with \u003ccode\u003ePyJWK\u003c/code\u003e / \u003ccode\u003ePyJWKClient\u003c/code\u003e.\u003c/strong\u003e When verifying with a \u003ccode\u003ePyJWK\u003c/code\u003e, the caller's \u003ccode\u003ealgorithms=[…]\u003c/code\u003e allow-list was checked against the token header \u003ccode\u003ealg\u003c/code\u003e as a string only; actual verification used the algorithm bound to the \u003ccode\u003ePyJWK\u003c/code\u003e. An attacker who controlled a registered JWKS key could sign with one algorithm and advertise another on the header. PyJWT now requires the token header \u003ccode\u003ealg\u003c/code\u003e to match the \u003ccode\u003ePyJWK\u003c/code\u003e's algorithm before verification. \u003cem\u003eReported by \u003ca href=\"https://github.com/sushi-gif\"\u003e\u003ccode\u003e@​sushi-gif\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\"\u003e\u003ccode\u003eGHSA-w7vc-732c-9m39\u003c/code\u003e\u003c/a\u003e — DoS via base64 decode of unused payload segment when \u003ccode\u003eb64=false\u003c/code\u003e.\u003c/strong\u003e For detached-payload JWS (\u003ccode\u003eb64=false\u003c/code\u003e), the compact-form payload segment was base64-decoded before being discarded in favor of the caller-supplied \u003ccode\u003edetached_payload\u003c/code\u003e. An attacker could inflate the unused segment to force CPU + memory cost without holding a valid signature. The segment is now required to be empty per RFC 7515 Appendix F, and is no longer decoded. \u003cem\u003eReported by \u003ca href=\"https://github.com/thesmartshadow\"\u003e\u003ccode\u003e@​thesmartshadow\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\"\u003e\u003ccode\u003eGHSA-993g-76c3-p5m4\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e accepts non-HTTP(S) URIs.\u003c/strong\u003e \u003ccode\u003ePyJWKClient.fetch_data\u003c/code\u003e passed its URI to \u003ccode\u003eurllib.request.urlopen\u003c/code\u003e, which by default also handles \u003ccode\u003efile://\u003c/code\u003e, \u003ccode\u003eftp://\u003c/code\u003e, and \u003ccode\u003edata:\u003c/code\u003e schemes. An application that fed an attacker-influenced URI into \u003ccode\u003ePyJWKClient\u003c/code\u003e could be coerced into reading local files or reaching other unintended schemes. \u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects any URI whose scheme isn't \u003ccode\u003ehttp\u003c/code\u003e or \u003ccode\u003ehttps\u003c/code\u003e. \u003cem\u003eReported by \u003ca href=\"https://github.com/KEIJOT\"\u003e\u003ccode\u003e@​KEIJOT\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\"\u003e\u003ccode\u003eGHSA-fhv5-28vv-h8m8\u003c/code\u003e\u003c/a\u003e — \u003ccode\u003ePyJWKClient\u003c/code\u003e cache wiped on fetch error.\u003c/strong\u003e A \u003ccode\u003efinally\u003c/code\u003e-block \u003ccode\u003eput(jwk_set=None)\u003c/code\u003e cleared the JWK Set cache whenever a fetch raised, turning a transient JWKS-endpoint outage into application-wide auth failure. The cache write was moved into the success path; transient errors no longer evict valid cached keys. \u003cem\u003eReported by \u003ca href=\"https://github.com/eddieran\"\u003e\u003ccode\u003e@​eddieran\u003c/code\u003e\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eFixed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty HMAC keys outright in \u003ccode\u003eHMACAlgorithm.prepare_key\u003c/code\u003e with \u003ccode\u003eInvalidKeyError\u003c/code\u003e instead of accepting them with only a warning. Defends against the \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e footgun. \u003cem\u003eThanks to \u003ca href=\"https://github.com/SnailSploit\"\u003e\u003ccode\u003e@​SnailSploit\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/spartan8806\"\u003e\u003ccode\u003e@​spartan8806\u003c/code\u003e\u003c/a\u003e for the reports.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eForward per-call \u003ccode\u003eoptions\u003c/code\u003e (including \u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e) from \u003ccode\u003ePyJWT.decode\u003c/code\u003e through to \u003ccode\u003ePyJWS._verify_signature\u003c/code\u003e. The option was previously silently dropped between the two layers, so it only took effect when set on the \u003ccode\u003ePyJWT\u003c/code\u003e instance. \u003cem\u003eThanks to \u003ca href=\"https://github.com/WLUB\"\u003e\u003ccode\u003e@​WLUB\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRFC 7797 §3 compliance for \u003ccode\u003eb64=false\u003c/code\u003e:\u003c/strong\u003e the encoder now auto-adds \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e to \u003ccode\u003ecrit\u003c/code\u003e, and the decoder rejects tokens that set \u003ccode\u003eb64=false\u003c/code\u003e without listing it in \u003ccode\u003ecrit\u003c/code\u003e. \u003cem\u003eThanks to \u003ca href=\"https://github.com/MachineLearning-Nerd\"\u003e\u003ccode\u003e@​MachineLearning-Nerd\u003c/code\u003e\u003c/a\u003e for the report.\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eChanged\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups, by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1152\"\u003e#1152\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eUpgrade notes\u003c/h2\u003e\n\u003cp\u003eMost fixes are invisible to correctly-configured callers. A few behavioral changes you may encounter:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEmpty HMAC keys now raise.\u003c/strong\u003e If your app passed \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e or \u003ccode\u003eb\u0026quot;\u0026quot;\u003c/code\u003e as a secret (often via a missing env var, e.g. \u003ccode\u003eos.getenv(\u0026quot;JWT_SECRET\u0026quot;, \u0026quot;\u0026quot;)\u003c/code\u003e), \u003ccode\u003eencode\u003c/code\u003e/\u003ccode\u003edecode\u003c/code\u003e will now raise \u003ccode\u003eInvalidKeyError\u003c/code\u003e. This is the intended behavior — fix the configuration.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWK\u003c/code\u003e decoding now requires the token's \u003ccode\u003ealg\u003c/code\u003e to match the JWK's algorithm.\u003c/strong\u003e Previously a mismatch was silently honored if the header \u003ccode\u003ealg\u003c/code\u003e appeared in the allow-list. Tokens that relied on this mismatch will now fail with \u003ccode\u003eInvalidAlgorithmError\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePyJWKClient\u003c/code\u003e now rejects non-HTTP(S) URIs at construction time.\u003c/strong\u003e Tests or dev environments that fetched JWKS from \u003ccode\u003efile://\u003c/code\u003e URIs need to switch to a local HTTP server or load the JWKS by other means (e.g. construct \u003ccode\u003ePyJWKSet.from_dict(...)\u003c/code\u003e directly).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eb64=false\u003c/code\u003e tokens are now strictly RFC 7515 / 7797 compliant.\u003c/strong\u003e Tokens with a non-empty compact-form payload segment, or that omit \u003ccode\u003e\u0026quot;b64\u0026quot;\u003c/code\u003e from \u003ccode\u003ecrit\u003c/code\u003e, will be rejected. PyJWT-produced tokens always satisfy both invariants, so round-trips through PyJWT are unaffected.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eenforce_minimum_key_length\u003c/code\u003e set per-call now takes effect.\u003c/strong\u003e Callers who passed \u003ccode\u003eoptions={\u0026quot;enforce_minimum_key_length\u0026quot;: True}\u003c/code\u003e to \u003ccode\u003ejwt.decode()\u003c/code\u003e previously got no enforcement; they will now get \u003ccode\u003eInvalidKeyError\u003c/code\u003e on undersized keys, as documented.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull changelog:\u003c/strong\u003e \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e2.12.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd typing_extensions dependency for Python \u0026lt; 3.11 by \u003ca href=\"https://github.com/jpadilla\"\u003e\u003ccode\u003e@​jpadilla\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/pull/1151\"\u003ejpadilla/pyjwt#1151\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\"\u003ehttps://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.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/jpadilla/pyjwt/blob/master/CHANGELOG.rst\"\u003epyjwt's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ccode\u003ev2.13.0 \u0026lt;https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\u0026gt;\u003c/code\u003e__\u003c/h2\u003e\n\u003cp\u003eSecurity\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Reject JWK JSON documents passed as raw HMAC secrets in\n  ``HMACAlgorithm.prepare_key`` to close an algorithm-confusion gap that\n  the existing PEM/SSH guard did not cover. Reported by @aradona91 in\n  `GHSA-xgmm-8j9v-c9wx \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-xgmm-8j9v-c9wx\u0026gt;`__.\n- Bind the JWT header ``alg`` to ``PyJWK.algorithm_name`` during\n  verification so the caller's ``algorithms=[...]`` allow-list cannot be\n  bypassed when decoding with a ``PyJWK`` / ``PyJWKClient`` key. Reported\n  by @sushi-gif in `GHSA-jq35-7prp-9v3f \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-jq35-7prp-9v3f\u0026gt;`__.\n- Reject non-``http(s)`` URI schemes in ``PyJWKClient`` so attacker-\n  influenced URIs cannot read local files or reach unintended schemes via\n  urllib's default ``file://`` / ``ftp://`` / ``data:`` handlers. Reported\n  by @KEIJOT in `GHSA-993g-76c3-p5m4 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-993g-76c3-p5m4\u0026gt;`__.\n- Preserve the cached JWK Set on fetch errors in ``PyJWKClient.fetch_data``.\n  The previous ``finally``-block ``put(None)`` pattern cleared the cache\n  on any transient outage, turning one bad JWKS request into application-\n  wide auth failure. Reported by @eddieran in `GHSA-fhv5-28vv-h8m8 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-fhv5-28vv-h8m8\u0026gt;`__.\n- Skip the unconditional base64 decode of the compact-form payload segment\n  when ``b64=false`` is set in the protected header, and require that\n  segment to be empty (RFC 7515 Appendix F detached form). Closes an\n  unauthenticated DoS amplifier. Reported by @thesmartshadow in\n  `GHSA-w7vc-732c-9m39 \u0026lt;https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39\u0026gt;`__.\n\u003cp\u003eFixed\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\n- Reject empty HMAC keys outright in ``HMACAlgorithm.prepare_key`` with\n  ``InvalidKeyError`` instead of accepting them with only a warning.\n  Thanks to @SnailSploit and @spartan8806 for independently flagging the\n  footgun.\n- Forward per-call ``options`` (including ``enforce_minimum_key_length``)\n  from ``PyJWT.decode`` through to ``PyJWS._verify_signature`` so the\n  option actually takes effect when set at the call site rather than only\n  on the ``PyJWT`` instance. Thanks to @WLUB for the report.\n- RFC 7797 §3 compliance for ``b64=false``: the encoder now auto-adds\n  ``\u0026amp;quot;b64\u0026amp;quot;`` to the ``crit`` header parameter, and the decoder rejects\n  tokens that set ``b64=false`` without listing it in ``crit``. Thanks to\n  @MachineLearning-Nerd for the report.\n\nChanged\n\u003c/code\u003e\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate the \u003ccode\u003edev\u003c/code\u003e, \u003ccode\u003edocs\u003c/code\u003e, and \u003ccode\u003etests\u003c/code\u003e package extras to dependency groups by \u003ca href=\"https://github.com/kurtmckee\"\u003e\u003ccode\u003e@​kurtmckee\u003c/code\u003e\u003c/a\u003e in \u003ccode\u003e[#1152](https://github.com/jpadilla/pyjwt/issues/1152) \u0026amp;lt;https://github.com/jpadilla/pyjwt/pull/1152\u0026amp;gt;\u003c/code\u003e__\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ccode\u003ev2.12.1 \u0026amp;lt;https://github.com/jpadilla/pyjwt/compare/2.12.0...2.12.1\u0026amp;gt;\u003c/code\u003e__\n\u0026lt;/tr\u0026gt;\u0026lt;/table\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/7144e4534c34810f4525dc4578a32addd8212cff\"\u003e\u003ccode\u003e7144e45\u003c/code\u003e\u003c/a\u003e Apply ruff format\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/d2f4bec4963897c0ef96ef64a875894f2c8542ab\"\u003e\u003ccode\u003ed2f4bec\u003c/code\u003e\u003c/a\u003e Restore \u003ccode\u003ecast()\u003c/code\u003e calls with cross-version \u003ccode\u003etype: ignore\u003c/code\u003e for \u003ccode\u003eprepare_key\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/22f478cebddd8294259c30f037ecb92b0b348774\"\u003e\u003ccode\u003e22f478c\u003c/code\u003e\u003c/a\u003e Remove redundant casts in \u003ccode\u003eRSAAlgorithm.prepare_key\u003c/code\u003e and `ECAlgorithm.prepare...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/95791b1759b8aa4f2203575d344d5c78564cdc81\"\u003e\u003ccode\u003e95791b1\u003c/code\u003e\u003c/a\u003e Bundle security fixes and hardening into 2.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/dcc27a9d3182a2349c30b160758785c6ce7a6508\"\u003e\u003ccode\u003edcc27a9\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1155\"\u003e#1155\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/9d08a9a1896845ed8eaf88e6f6ac61e5800c3e7a\"\u003e\u003ccode\u003e9d08a9a\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1146\"\u003e#1146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/b87c10014d4109f0214fea188d00faaaf8a80e64\"\u003e\u003ccode\u003eb87c100\u003c/code\u003e\u003c/a\u003e Bump codecov/codecov-action from 5 to 6 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1154\"\u003e#1154\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/40e3147eb5f790d8d041772e5fc00728a176c812\"\u003e\u003ccode\u003e40e3147\u003c/code\u003e\u003c/a\u003e Migrate development extras to dependency groups (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1152\"\u003e#1152\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jpadilla/pyjwt/commit/a4e1a3d1218b01c5806420b8f16d9308ac4adc30\"\u003e\u003ccode\u003ea4e1a3d\u003c/code\u003e\u003c/a\u003e Add typing_extensions dependency for Python \u0026lt; 3.11 (\u003ca href=\"https://redirect.github.com/jpadilla/pyjwt/issues/1151\"\u003e#1151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.0...2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pymysql` 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/PyMySQL/PyMySQL/releases\"\u003epymysql'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\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/PyMySQL/PyMySQL/pull/1232\"\u003ePyMySQL/PyMySQL#1232\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReorganize TLS options: implement PREFERRED/REQUIRED SSL mode behavior by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1234\"\u003ePyMySQL/PyMySQL#1234\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport MySQL 8 row/column alias syntax in \u003ccode\u003eexecutemany\u003c/code\u003e INSERT regex by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1235\"\u003ePyMySQL/PyMySQL#1235\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpose SQLSTATE on MySQL protocol exceptions without changing exception formatting by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1236\"\u003ePyMySQL/PyMySQL#1236\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReject non-finite \u003ccode\u003edecimal.Decimal\u003c/code\u003e query parameters (\u003ccode\u003eNaN\u003c/code\u003e, \u003ccode\u003esNaN\u003c/code\u003e, \u003ccode\u003e±Infinity\u003c/code\u003e) by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1237\"\u003ePyMySQL/PyMySQL#1237\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update outdated requirements and reference links by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1239\"\u003ePyMySQL/PyMySQL#1239\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare CHANGELOG for v1.2.0 release from v1.1.3 changes by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1238\"\u003ePyMySQL/PyMySQL#1238\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edeprecate \u003ccode\u003edb\u003c/code\u003e and \u003ccode\u003epasswd\u003c/code\u003e again by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1240\"\u003ePyMySQL/PyMySQL#1240\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edeprecate \u003ccode\u003ereconnect\u003c/code\u003e in \u003ccode\u003eConnection.ping()\u003c/code\u003e by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1241\"\u003ePyMySQL/PyMySQL#1241\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDeprecate \u003ccode\u003eConnection.set_charset()\u003c/code\u003e at runtime and document warning behavior by \u003ca href=\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1243\"\u003ePyMySQL/PyMySQL#1243\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/PyMySQL/PyMySQL/pull/1244\"\u003ePyMySQL/PyMySQL#1244\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/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1234\"\u003ePyMySQL/PyMySQL#1234\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyMySQL/PyMySQL/compare/v1.1.3...v1.2.0\"\u003ehttps://github.com/PyMySQL/PyMySQL/compare/v1.1.3...v1.2.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.1.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ecallproc: escape procname by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1225\"\u003ePyMySQL/PyMySQL#1225\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003euse ubuntu-slim and dependabot by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1226\"\u003ePyMySQL/PyMySQL#1226\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/PyMySQL/PyMySQL/pull/1227\"\u003ePyMySQL/PyMySQL#1227\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump codecov/codecov-action 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/PyMySQL/PyMySQL/pull/1228\"\u003ePyMySQL/PyMySQL#1228\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/PyMySQL/PyMySQL/pull/1229\"\u003ePyMySQL/PyMySQL#1229\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003erelease 1.1.3 by \u003ca href=\"https://github.com/methane\"\u003e\u003ccode\u003e@​methane\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1230\"\u003ePyMySQL/PyMySQL#1230\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/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] made their first contribution in \u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/pull/1227\"\u003ePyMySQL/PyMySQL#1227\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/PyMySQL/PyMySQL/compare/v1.1.2...v1.1.3\"\u003ehttps://github.com/PyMySQL/PyMySQL/compare/v1.1.2...v1.1.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/PyMySQL/PyMySQL/blob/main/CHANGELOG.md\"\u003epymysql's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.2.0\u003c/h2\u003e\n\u003cp\u003eRelease date: 2026-05-19\u003c/p\u003e\n\u003ch3\u003eBreaking changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eConnection.ping()\u003c/code\u003e change the default to not reconnect and deprecate \u003ccode\u003ereconnect\u003c/code\u003e argument.\nCreate a new connection if you want to reconnect. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1241\"\u003e#1241\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eError classes in Cursor class are removed. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003econnect()\u003c/code\u003e arguments \u003ccode\u003edb\u003c/code\u003e and \u003ccode\u003epasswd\u003c/code\u003e now emit DeprecationWarning.\nUse \u003ccode\u003edatabase\u003c/code\u003e and \u003ccode\u003epassword\u003c/code\u003e instead. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReorganize TLS connection behavior.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePyMySQL uses TLS by default when server supports it.\nUse \u003ccode\u003essl_disabled=True\u003c/code\u003e to prohibit SSL. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1213\"\u003e#1213\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWhen \u003ccode\u003essl_verify_cert=True\u003c/code\u003e, \u003ccode\u003essl_verify_identity=True\u003c/code\u003e, an \u003ccode\u003essl.SSLContext\u003c/code\u003e is passed,\nor when any other SSL option is configured, the connection \u003cstrong\u003erequires\u003c/strong\u003e SSL and raises\n\u003ccode\u003eOperationalError\u003c/code\u003e (CR_SSL_CONNECTION_ERROR) if the server doesn't support it. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1234\"\u003e#1234\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSupport MySQL 8 row/column alias syntax in \u003ccode\u003eexecutemany\u003c/code\u003e INSERT regex. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1235\"\u003e#1235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose SQLSTATE on MySQL protocol exceptions without changing exception formatting. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1236\"\u003e#1236\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject non-finite \u003ccode\u003edecimal.Decimal\u003c/code\u003e query parameters (\u003ccode\u003eNaN\u003c/code\u003e, \u003ccode\u003esNaN\u003c/code\u003e, \u003ccode\u003e±Infinity\u003c/code\u003e). (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1237\"\u003e#1237\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eConnection.set_charset(charset)\u003c/code\u003e now emits \u003ccode\u003eDeprecationWarning\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.1.3\u003c/h2\u003e\n\u003cp\u003eRelease date: 2026-05-01\u003c/p\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix \u003ccode\u003eCursor.callproc()\u003c/code\u003e didn't escape procedure name. (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1206\"\u003e#1206\u003c/a\u003e)\nThere was a possibility of SQL injection when calling a procedure with a string received from an untrusted source as the procedure name.\u003c/p\u003e\n\u003cp\u003eNOTICE: This change may cause backward compatibility issues. If you specified a procedure name like \u003ccode\u003e\u0026quot;dbname.funcname\u0026quot;\u003c/code\u003e, the previous version called \u003ccode\u003eCALL dbname.funcname\u003c/code\u003e, but from this version, it will call \u003ccode\u003eCALL `dbname.funcname` \u003c/code\u003e so you cannot specify procedure name with database name anymore.\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/PyMySQL/PyMySQL/commit/0f1c324a6b73e34810af3e584f6d32554604488a\"\u003e\u003ccode\u003e0f1c324\u003c/code\u003e\u003c/a\u003e use ubuntu-latest for pypi publishing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/53b16b22f0fefc64ccf4606f20c87bedcceb1cac\"\u003e\u003ccode\u003e53b16b2\u003c/code\u003e\u003c/a\u003e Release v1.2.0 (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1244\"\u003e#1244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/637fe7e6b2b1bc6effefc53d0faccfe3d5036ea5\"\u003e\u003ccode\u003e637fe7e\u003c/code\u003e\u003c/a\u003e Deprecate \u003ccode\u003eConnection.set_charset()\u003c/code\u003e at runtime and document warning behavior...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/23ca04a357a042db4188adefd04031c205837927\"\u003e\u003ccode\u003e23ca04a\u003c/code\u003e\u003c/a\u003e add AGENTS.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/7349a44e2b264395bd2d78fe3c9b7fdb26a7e740\"\u003e\u003ccode\u003e7349a44\u003c/code\u003e\u003c/a\u003e deprecate \u003ccode\u003ereconnect\u003c/code\u003e in \u003ccode\u003eConnection.ping()\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1241\"\u003e#1241\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/ad5c50c254925caf24dbc06832a69f5c5c5ec76b\"\u003e\u003ccode\u003ead5c50c\u003c/code\u003e\u003c/a\u003e update CHANGELOG\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/c963edbf53ac52f9ea6c9717411127d0d7f7061a\"\u003e\u003ccode\u003ec963edb\u003c/code\u003e\u003c/a\u003e Deprecation and removals (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1240\"\u003e#1240\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/af6b9b42abcea73d9bfdb0aaff75656171c9cec7\"\u003e\u003ccode\u003eaf6b9b4\u003c/code\u003e\u003c/a\u003e Prepare CHANGELOG for v1.2.0 release from v1.1.3 changes (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1238\"\u003e#1238\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/c7bf73f1987c3b78debb39a7a074e806178ecc9b\"\u003e\u003ccode\u003ec7bf73f\u003c/code\u003e\u003c/a\u003e docs: update outdated requirements and reference links (\u003ca href=\"https://redirect.github.com/PyMySQL/PyMySQL/issues/1239\"\u003e#1239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/PyMySQL/PyMySQL/commit/c532b8d9d515ac5769cd285a5a520afed1e035c1\"\u003e\u003ccode\u003ec532b8d\u003c/code\u003e\u003c/a\u003e Reject non-finite \u003ccode\u003edecimal.Decimal\u003c/code\u003e query parameters (\u003ccode\u003eNaN\u003c/code\u003e, \u003ccode\u003esNaN\u003c/code\u003e, `±Infini...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/PyMySQL/PyMySQL/compare/v1.1.2...v1.2.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `requests` from 2.33.1 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.1...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.2.25 to 2026.6.17\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d0ac52f3d93a514224197c7efb66c41b1beae5d1\"\u003e\u003ccode\u003ed0ac52f\u003c/code\u003e\u003c/a\u003e 2026.06.17 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d46de621787c609158579929f44b91ce731d01b8\"\u003e\u003ccode\u003ed46de62\u003c/code\u003e\u003c/a\u003e Bump actions/checkout from 6.0.2 to 6.0.3 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/6c183ec39d81135350dd44abd0e5daefc8e35b9d\"\u003e\u003ccode\u003e6c183ec\u003c/code\u003e\u003c/a\u003e fix: update Requests docs link to canonical URL (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/415\"\u003e#415\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/36e35680e0dc42c70cd60bfe440e92e7137f5a1c\"\u003e\u003ccode\u003e36e3568\u003c/code\u003e\u003c/a\u003e Bump dessant/lock-threads from 6.0.0 to 6.0.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d7ea151afc2ce6bef0555b9349902bd867e928dd\"\u003e\u003ccode\u003ed7ea151\u003c/code\u003e\u003c/a\u003e 2026.05.20 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/413\"\u003e#413\u003c/a\u003e)\u003c/li\u003e\n\u003cli\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\u003eAdditional commits viewable in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.06.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.15 to 3.18\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.18 (2026-06-02)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen decoding a domain, add a \u003ccode\u003edisplay\u003c/code\u003e argument that will pass\nthrough invalid labels rather than raising an exception.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.17 (2026-05-28)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSubstantial 75% reduction in memory usage through new data\nstructures and some optimization in processing speed.\u003c/li\u003e\n\u003cli\u003eAdded a general 1024-character input length cap to the public\nvalidation, conversion, and codec entry points. This is well above\nany legitimate domain or label and guards against pathological\ninputs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.16 (2026-05-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a command-line interface (\u003ccode\u003epython -m idna\u003c/code\u003e, also available as\nthe \u003ccode\u003eidna\u003c/code\u003e script). Encodes or decodes one or more domains supplied\nas arguments or on standard input, with options to select A-label\nor U-label output and control error handling.\u003c/li\u003e\n\u003cli\u003eRaise the minimum supported Python version to 3.9\u003c/li\u003e\n\u003cli\u003eVarious code quality 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/kjd/idna/commit/f39ea903ba49eb5a0b2c6723c9a929b41ed4a0f1\"\u003e\u003ccode\u003ef39ea90\u003c/code\u003e\u003c/a\u003e Release 3.18\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/40f4e407bc7452da37c24b0c112dcda9a5b299ba\"\u003e\u003ccode\u003e40f4e40\u003c/code\u003e\u003c/a\u003e Pre-release 3.18rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1a5bf80f2fa40454589e6144efe5f72015ef9d24\"\u003e\u003ccode\u003e1a5bf80\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/253\"\u003e#253\u003c/a\u003e from kjd/lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5bbb26fc86e28c4ee1434ae8ae8db76de4c2a5ac\"\u003e\u003ccode\u003e5bbb26f\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into lenient-decode\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/c532bae5270489cef8faf9f6b1eb70cbcb454c6d\"\u003e\u003ccode\u003ec532bae\u003c/code\u003e\u003c/a\u003e Rename decode() lenient= option to display= (issue \u003ca href=\"https://redirect.github.com/kjd/idna/issues/248\"\u003e#248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/0b1758ba11952a2e88fd6141ffa620409bff0580\"\u003e\u003ccode\u003e0b1758b\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/252\"\u003e#252\u003c/a\u003e from kjd/release-3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f48619c4cea6859b938d560fdd9feb898e678567\"\u003e\u003ccode\u003ef48619c\u003c/code\u003e\u003c/a\u003e Release 3.17\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7421ba8003227f816142ab40178e3a7d204e6847\"\u003e\u003ccode\u003e7421ba8\u003c/code\u003e\u003c/a\u003e Pre-release 3.17rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/22ebb73b164081f209449b50162eb7ce086e96a4\"\u003e\u003ccode\u003e22ebb73\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/251\"\u003e#251\u003c/a\u003e from kjd/structure-optimizations\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2a7ac0a58c788d50112a5003af545a83807fb108\"\u003e\u003ccode\u003e2a7ac0a\u003c/code\u003e\u003c/a\u003e Drop redundant parallel-arrays comment from uts46data\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.15...v3.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `faker` from 40.13.0 to 40.23.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/joke2k/faker/releases\"\u003efaker's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v40.23.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.23.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.22.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.22.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.21.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.21.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.20.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.20.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.19.1\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.19.1/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.19.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.19.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.18.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.18.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.17.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.17.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.16.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.16.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.15.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.15.0/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.14.1\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.14.1/CHANGELOG.md\"\u003eCHANGELOG.md\u003c/a\u003e.\u003c/p\u003e\n\u003ch2\u003eRelease v40.14.0\u003c/h2\u003e\n\u003cp\u003eSee \u003ca href=\"https://github.com/joke2k/faker/blob/refs/tags/v40.14.0/CHANGELOG.md\"\u003eCHANGELOG.md\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/joke2k/faker/blob/master/CHANGELOG.md\"\u003efaker's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.22.0...v40.23.0\"\u003ev40.23.0 - 2026-06-10\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd French social security numbers with Corsican codes (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2373\"\u003e#2373\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/dancergraham\"\u003e\u003ccode\u003e@​dancergraham\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix typos in docstrings and comments (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2387\"\u003e#2387\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/Labib-Bin-Salam\"\u003e\u003ccode\u003e@​Labib-Bin-Salam\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.21.0...v40.22.0\"\u003ev40.22.0 - 2026-06-09\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003emr_IN\u003c/code\u003e \u003ccode\u003eperson\u003c/code\u003e, \u003ccode\u003eaddress\u003c/code\u003e, and \u003ccode\u003ephone_number\u003c/code\u003e providers (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2367\"\u003e#2367\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/RedZapdos123\"\u003e\u003ccode\u003e@​RedZapdos123\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix flaky \u003ccode\u003etest_optional\u003c/code\u003e by using seed and larger sample size (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2376\"\u003e#2376\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/tejasae-afk\"\u003e\u003ccode\u003e@​tejasae-afk\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.20.0...v40.21.0\"\u003ev40.21.0 - 2026-06-02\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd banks list for \u003ccode\u003een_GB\u003c/code\u003e locale (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2363\"\u003e#2363\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/osolomientsev\"\u003e\u003ccode\u003e@​osolomientsev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.19.1...v40.20.0\"\u003ev40.20.0 - 2026-06-01\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003epan\u003c/code\u003e and \u003ccode\u003egstin\u003c/code\u003e generators to \u003ccode\u003een_IN\u003c/code\u003e SSN provider (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2357\"\u003e#2357\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/RedZapdos123\"\u003e\u003ccode\u003e@​RedZapdos123\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eImprove barcode provider test coverage (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2382\"\u003e#2382\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/lphuc2250gma\"\u003e\u003ccode\u003e@​lphuc2250gma\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBump liskin/gh-problem-matcher-wrap from 3 to 4 (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2381\"\u003e#2381\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot].\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.19.0...v40.19.1\"\u003ev40.19.1 - 2026-05-22\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix shared state mutation in \u003ccode\u003een_IN\u003c/code\u003e \u003ccode\u003epincode_in_state\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2369\"\u003e#2369\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/RedZapdos123\"\u003e\u003ccode\u003e@​RedZapdos123\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.18.0...v40.19.0\"\u003ev40.19.0 - 2026-05-22\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003euuid1\u003c/code\u003e and \u003ccode\u003euuid7\u003c/code\u003e providers to \u003ccode\u003emisc\u003c/code\u003e provider (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2344\"\u003e#2344\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/Krishnachaitanyakc\"\u003e\u003ccode\u003e@​Krishnachaitanyakc\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.17.0...v40.18.0\"\u003ev40.18.0 - 2026-05-14\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd automotive providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales. Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ephone_number\u003c/code\u003e provider for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales. Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.16.0...v40.17.0\"\u003ev40.17.0 - 2026-05-14\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eam_ET\u003c/code\u003e \u003ccode\u003ephone_number\u003c/code\u003e provider for Ethiopia. Thanks \u003ca href=\"https://github.com/jasur-py\"\u003e\u003ccode\u003e@​jasur-py\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.15.0...v40.16.0\"\u003ev40.16.0 - 2026-05-14\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix duplicate phone number prefix \u003ccode\u003e145\u003c/code\u003e in \u003ccode\u003ezh_CN\u003c/code\u003e locale. Thanks \u003ca href=\"https://github.com/r266-tec\"\u003e\u003ccode\u003e@​r266-tec\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\u003ca href=\"https://github.com/joke2k/faker/compare/v40.14.1...v40.15.0\"\u003ev40.15.0 - 2026-04-17\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd job providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2352\"\u003e#2352\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd company providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2351\"\u003e#2351\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd geo providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2350\"\u003e#2350\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd currency providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2349\"\u003e#2349\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003edate_time\u003c/code\u003e provider for \u003ccode\u003ear_DZ\u003c/code\u003e locale (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2348\"\u003e#2348\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eAdd ssn providers for \u003ccode\u003ear_DZ\u003c/code\u003e and \u003ccode\u003efr_DZ\u003c/code\u003e locales (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2347\"\u003e#2347\u003c/a\u003e). Thanks \u003ca href=\"https://github.com/othmane099\"\u003e\u003ccode\u003e@​othmane099\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/joke2k/faker/commit/f5fcbb64f4e7c1cff6d5b9b0bd0ce96be1f8c2fe\"\u003e\u003ccode\u003ef5fcbb6\u003c/code\u003e\u003c/a\u003e Bump version: 40.22.0 → 40.23.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/baaccee134167886f4fbe631921e1c028b8b890d\"\u003e\u003ccode\u003ebaaccee\u003c/code\u003e\u003c/a\u003e 📝 Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/8336b21bc7d4a6d7499a5f9254280e2e89ad875a\"\u003e\u003ccode\u003e8336b21\u003c/code\u003e\u003c/a\u003e :lipstick: Lint code\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/02bd52b23ea2e5440ee0e3665c61aae993660902\"\u003e\u003ccode\u003e02bd52b\u003c/code\u003e\u003c/a\u003e French social security numbers - corsican codes (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2373\"\u003e#2373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/22e7aca4905f67be9e47e965cd5dcfcde654cace\"\u003e\u003ccode\u003e22e7aca\u003c/code\u003e\u003c/a\u003e Fix typos in docstrings and comments (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2387\"\u003e#2387\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/c3a9a5b0a2db5edb0698e9962a559f23f62221d0\"\u003e\u003ccode\u003ec3a9a5b\u003c/code\u003e\u003c/a\u003e Bump version: 40.21.0 → 40.22.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/71393c60588f477ea29fd7436f0aac33c827a60b\"\u003e\u003ccode\u003e71393c6\u003c/code\u003e\u003c/a\u003e 📝 Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/77896ac0da17612e0eb3c1a26a07ec3a7bb6f371\"\u003e\u003ccode\u003e77896ac\u003c/code\u003e\u003c/a\u003e feat(locale): add \u003ccode\u003emr_IN\u003c/code\u003e \u003ccode\u003eperson\u003c/code\u003e, \u003ccode\u003eaddress\u003c/code\u003e, and \u003ccode\u003ephone_number\u003c/code\u003e providers (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/dc63614e2077e0daa4a5c26478dff8935840c7d0\"\u003e\u003ccode\u003edc63614\u003c/code\u003e\u003c/a\u003e Fixed flaky test_optional by using seed and larger sample size. (\u003ca href=\"https://redirect.github.com/joke2k/faker/issues/2376\"\u003e#2376\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/joke2k/faker/commit/8b06111fbda82a8e84707f86f5d77973c76d836d\"\u003e\u003ccode\u003e8b06111\u003c/code\u003e\u003c/a\u003e Bump version: 40.20.0 → 40.21.0\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/joke2k/faker/compare/v40.13.0...v40.23.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pdfplumber` from 0.11.9 to 0.11.10\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/releases\"\u003epdfplumber's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.11.10\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jsvine/pdfplumber/blob/stable/CHANGELOG.md\"\u003epdfplumber's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.11.10] — 2026-06-14\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade \u003ccode\u003epdfminer.six\u003c/code\u003e from \u003ccode\u003e20251230\u003c/code\u003e to \u003ccode\u003e20260107\u003c/code\u003e. (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff6\"\u003e07a5ff6\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate minimum version requirement for \u003ccode\u003ePillow\u003c/code\u003e and \u003ccode\u003epypdfium2\u003c/code\u003e and update versions in \u003ccode\u003erequirements-dev.txt\u003c/code\u003e (h/t \u003ca href=\"https://github.com/kjoetang\"\u003e\u003ccode\u003e@​kjoetang\u003c/code\u003e\u003c/a\u003e). (\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b\"\u003e1e6de0b\u003c/a\u003e + \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1374\"\u003e#1374\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/7d4f2f582f2d99f9e60ba522fdf7afd2f6d54c62\"\u003e\u003ccode\u003e7d4f2f5\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/1e6de0b2f8f6fd7f7f92b73d2f1f9350b6e7e9d2\"\u003e\u003ccode\u003e1e6de0b\u003c/code\u003e\u003c/a\u003e Upgrade dependencies\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/91b2b6cbca6efd8b94cc44f942385b1047f00661\"\u003e\u003ccode\u003e91b2b6c\u003c/code\u003e\u003c/a\u003e Appease linter/coverage\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/98041536932ce85d18a1fba80d9db0686b831d9d\"\u003e\u003ccode\u003e9804153\u003c/code\u003e\u003c/a\u003e Update CHANGELOG.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ebafd6e9cb81afcfee0e4d79d119d3058490467a\"\u003e\u003ccode\u003eebafd6e\u003c/code\u003e\u003c/a\u003e Update Python versions in setup.py classifiers\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/fc2c9a9001415ebf7b7221eb89db4cb7d2f65fc8\"\u003e\u003ccode\u003efc2c9a9\u003c/code\u003e\u003c/a\u003e Fix list of tested Python versions in README \u003ca href=\"https://redirect.github.com/jsvine/pdfplumber/issues/1355\"\u003e#1355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/07a5ff65d4c92b648bf306e3e782e481258b6c6d\"\u003e\u003ccode\u003e07a5ff6\u003c/code\u003e\u003c/a\u003e Upgrade pdfminer.six from 20251230 to 20260107\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/jsvine/pdfplumber/commit/ec96f7256dde1ccad940c19bf9eb97ddb98cfae6\"\u003e\u003ccode\u003eec96f72\u003c/code\u003e\u003c/a\u003e Update Makefile\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/jsvine/pdfplumber/compare/v0.11.9...v0.11.10\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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/samifahad58/suhail/pull/13","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/samifahad58%2Fsuhail/issues/13","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/13/packages"}},{"old_version":"2026.5.20","new_version":"2026.6.17","update_type":"minor","path":"the pip-deps group","pr_created_at":"2026-06-20T01:03:04.000Z","version_change":"2026.5.20 → 2026.6.17","issue":{"uuid":"4704509362","node_id":"PR_kwDOEwGhXM7okShO","number":897,"state":"closed","title":"Bump certifi from 2026.5.20 to 2026.6.17 in the pip-deps group","user":"dependabot[bot]","labels":["dependencies","skip changelog"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-27T01:03:14.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-20T01:03:04.000Z","updated_at":"2026-06-27T01:03:16.000Z","time_to_close":604810,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"}],"path":"the pip-deps group","ecosystem":"pip"},"body":"Bumps the pip-deps group with 1 update: [certifi](https://github.com/certifi/python-certifi).\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\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi\u0026package-manager=pip\u0026previous-version=2026.5.20\u0026new-version=2026.6.17)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/miniscruff/changie/pull/897","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/miniscruff%2Fchangie/issues/897","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/897/packages"}},{"old_version":"2026.5.20","new_version":"2026.6.17","update_type":"minor","path":null,"pr_created_at":"2026-06-18T03:03:17.000Z","version_change":"2026.5.20 → 2026.6.17","issue":{"uuid":"4688752095","node_id":"PR_kwDOD6WvmM7nwMqF","number":850,"state":"open","title":"build(deps): bump certifi from 2026.5.20 to 2026.6.17","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-18T03:03:17.000Z","updated_at":"2026-06-18T03:13:13.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps)","packages":[{"name":"certifi","old_version":"2026.5.20","new_version":"2026.6.17","repository_url":"https://github.com/certifi/python-certifi"}],"path":null,"ecosystem":"pip"},"body":"\u003e [!WARNING]\n\u003e Dependabot will stop supporting `python v3.9`!\n\u003e \n\u003e Please upgrade to one of the following versions: `v3.9`, `v3.10`, `v3.11`, `v3.12`, `v3.13`, or `v3.14`.\n\u003e\n\nBumps [certifi](https://github.com/certifi/python-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\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=certifi\u0026package-manager=pip\u0026previous-version=2026.5.20\u0026new-version=2026.6.17)](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/histolab/histolab/pull/850","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/histolab%2Fhistolab/issues/850","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/850/packages"}},{"old_version":"2025.1.31","new_version":"2026.5.20","update_type":"major","path":null,"pr_created_at":"2026-06-15T05:23:22.000Z","version_change":"2025.1.31 → 2026.5.20","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"}}]}