{"id":3307,"name":"cachetools","ecosystem":"pip","repository_url":"https://github.com/tkem/cachetools","issues_count":1279,"created_at":"2025-06-06T16:30:10.535Z","updated_at":"2025-06-06T16:30:10.535Z","purl":"pkg:pypi/cachetools","metadata":{"id":2663184,"name":"cachetools","ecosystem":"pypi","description":"Extensible memoizing collections and decorators","homepage":"https://github.com/tkem/cachetools/","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/tkem/cachetools","keywords_array":[],"namespace":null,"versions_count":56,"first_release_published_at":"2014-03-22T12:06:53.000Z","latest_release_published_at":"2025-05-23T20:01:11.000Z","latest_release_number":"6.0.0","last_synced_at":"2025-06-06T00:02:06.262Z","created_at":"2022-04-10T10:16:29.872Z","updated_at":"2025-06-06T00:02:06.262Z","registry_url":"https://pypi.org/project/cachetools/","install_command":"pip install cachetools --index-url https://pypi.org/simple","documentation_url":"https://cachetools.readthedocs.io/","metadata":{"funding":null,"documentation":null,"classifiers":["Development Status :: 5 - Production/Stable","Environment :: Other Environment","Intended Audience :: Developers","License :: OSI Approved :: MIT License","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.9","Topic :: Software Development :: Libraries :: Python Modules"],"normalized_name":"cachetools"},"repo_metadata":{"id":15277401,"uuid":"18006791","full_name":"tkem/cachetools","owner":"tkem","description":"Extensible memoizing collections and decorators","archived":false,"fork":false,"pushed_at":"2024-05-01T18:11:35.000Z","size":366,"stargazers_count":2126,"open_issues_count":12,"forks_count":159,"subscribers_count":27,"default_branch":"master","last_synced_at":"2024-05-15T02:21:37.951Z","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":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tkem.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-03-22T10:15:14.000Z","updated_at":"2024-05-28T19:19:01.338Z","dependencies_parsed_at":"2024-05-01T19:29:04.334Z","dependency_job_id":null,"html_url":"https://github.com/tkem/cachetools","commit_stats":{"total_commits":258,"total_committers":9,"mean_commits":"28.666666666666668","dds":0.03875968992248058,"last_synced_commit":"76e4024fcf2a4f2b6a808f3d28f41527ede5b55b"},"previous_names":[],"tags_count":46,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tkem","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":215707131,"owners_count":15919086,"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":"tkem","name":"Thomas Kemmer","uuid":"2833077","kind":"user","description":"","email":"","website":null,"location":"Graz, Austria","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/2833077?u=b498fae9ae3931a43a30420d6a2a100ec1ac5db0\u0026v=4","repositories_count":19,"last_synced_at":"2023-04-09T07:16:05.544Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/tkem","funding_links":[],"total_stars":2512,"followers":null,"following":null,"created_at":"2022-11-02T16:23:10.023Z","updated_at":"2024-03-25T17:39:33.347Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tkem","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tkem/repositories"},"tags":[{"name":"v5.3.3","sha":"1fcadea96ce67d499965b085f0b0b2253b78bb80","kind":"tag","published_at":"2024-02-27T20:00:30.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v5.3.3","html_url":"https://github.com/tkem/cachetools/releases/tag/v5.3.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.3.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.3.3/manifests"},{"name":"v5.3.2","sha":"3889195258e3d874e2b93497ae73261b8c6bb53d","kind":"tag","published_at":"2023-10-24T18:12:28.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v5.3.2","html_url":"https://github.com/tkem/cachetools/releases/tag/v5.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.3.2/manifests"},{"name":"v5.3.1","sha":"8b56caa87f2dc624f3ec453127559ab893616efa","kind":"tag","published_at":"2023-05-27T20:35:49.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v5.3.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v5.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.3.1/manifests"},{"name":"v5.3.0","sha":"8f0b51661f9def22fb623de09648a2b20f73569b","kind":"tag","published_at":"2023-01-22T22:23:32.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v5.3.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v5.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.3.0/manifests"},{"name":"v5.2.1","sha":"2abfc3682bd76019a3a2b09b0e290e385ce11429","kind":"tag","published_at":"2023-01-08T20:33:45.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v5.2.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v5.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.2.1/manifests"},{"name":"v5.2.0","sha":"36b83c34afdc27df1a0c34f673b27ba06231c833","kind":"tag","published_at":"2022-05-29T20:46:59.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v5.2.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v5.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.2.0/manifests"},{"name":"v5.1.0","sha":"4d53f44bb0a5d9bdb68a83557aa7e7bc9a68d630","kind":"tag","published_at":"2022-05-15T20:38:06.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v5.1.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v5.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.1.0/manifests"},{"name":"v5.0.0","sha":"f8a166b63a3f3adef1cb8d2d81417812bddc0240","kind":"tag","published_at":"2021-12-21T20:23:54.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v5.0.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v5.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v5.0.0/manifests"},{"name":"v4.2.4","sha":"8b9bbc4b60429bd73a06ff54a8eefd141215acc2","kind":"tag","published_at":"2021-09-30T10:16:49.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v4.2.4","html_url":"https://github.com/tkem/cachetools/releases/tag/v4.2.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.4/manifests"},{"name":"v4.2.3","sha":"bc998ba4278e06f19ab0270c42b8ff7af6448cab","kind":"tag","published_at":"2021-09-29T20:29:38.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v4.2.3","html_url":"https://github.com/tkem/cachetools/releases/tag/v4.2.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.3/manifests"},{"name":"v4.2.2","sha":"e919f2fbfca1c404a9d9e313ddc0a1f4fe119f76","kind":"tag","published_at":"2021-04-27T21:16:25.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v4.2.2","html_url":"https://github.com/tkem/cachetools/releases/tag/v4.2.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.2/manifests"},{"name":"v4.2.1","sha":"16c77042c5734fa465788a386be84fc63cb68e71","kind":"tag","published_at":"2021-01-24T20:35:40.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v4.2.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v4.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.1/manifests"},{"name":"v4.2.0","sha":"e6acc1eaff5593158933d24ca035d746d5a13899","kind":"tag","published_at":"2020-12-10T20:26:06.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v4.2.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v4.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.2.0/manifests"},{"name":"v4.1.1","sha":"31a78b5238a686d12eb11ba2850a96d9d68f49cd","kind":"tag","published_at":"2020-06-28T19:27:50.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v4.1.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v4.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.1.1/manifests"},{"name":"v4.1.0","sha":"a6258fb26c2b21cf56e84be43807fd5d055480d2","kind":"tag","published_at":"2020-04-08T11:33:17.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v4.1.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v4.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.1.0/manifests"},{"name":"v4.0.0","sha":"fa9d4760dc44cd77f5eafd30cbaeed40a3435c96","kind":"tag","published_at":"2019-12-15T19:53:59.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v4.0.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v4.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v4.0.0/manifests"},{"name":"v3.1.1","sha":"c530924cdec86855be6322d3e4dd979bfc9250e4","kind":"tag","published_at":"2019-05-23T19:49:33.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v3.1.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v3.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v3.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v3.1.1/manifests"},{"name":"v3.1.0","sha":"1b67cddadccb89993e9d2567bac22e57e2b2b373","kind":"tag","published_at":"2019-01-29T20:34:02.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v3.1.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v3.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v3.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v3.1.0/manifests"},{"name":"v3.0.0","sha":"90d35075eca92d2064bb87ddc1f19f0bf82311c9","kind":"tag","published_at":"2018-11-04T17:37:48.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v3.0.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v3.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v3.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v3.0.0/manifests"},{"name":"v2.1.0","sha":"36d864e9584224a6b336654f46b4032994e9b507","kind":"tag","published_at":"2018-05-12T16:22:02.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v2.1.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v2.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v2.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v2.1.0/manifests"},{"name":"v2.0.1","sha":"fba5f8a5e8bb48c9ae4eff81d10fe665ff66b066","kind":"tag","published_at":"2017-08-11T16:53:43.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v2.0.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v2.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v2.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v2.0.1/manifests"},{"name":"v2.0.0","sha":"e27332bc82f4e327aedaec17c9b656ae719322ed","kind":"tag","published_at":"2016-10-03T12:09:49.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v2.0.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v2.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v2.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v2.0.0/manifests"},{"name":"v1.1.6","sha":"8bb68a235ffd0629a690cfe9a2dd913998f581f1","kind":"tag","published_at":"2016-04-01T10:06:53.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.1.6","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.1.6","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.6","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.6/manifests"},{"name":"v1.1.5","sha":"42853733d0caf68ef5bf5933a377572b05437e2c","kind":"tag","published_at":"2015-10-25T13:59:12.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.1.5","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.1.5","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.5/manifests"},{"name":"v1.1.4","sha":"41d521bd38cdd6c6d0352ebf80eeae747e42a509","kind":"tag","published_at":"2015-10-24T20:40:46.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.1.4","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.1.4","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.4/manifests"},{"name":"v1.1.3","sha":"4f4b452255f65b0ec2aaca066f13ac1a4b91ea09","kind":"tag","published_at":"2015-09-15T18:52:37.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.1.3","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.1.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.3/manifests"},{"name":"v1.1.2","sha":"c8c8db1e9cec443f1a15fbac7858b5d8f84506ba","kind":"tag","published_at":"2015-09-15T18:12:30.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.1.2","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.2/manifests"},{"name":"v1.1.1","sha":"5cdedd518b7c64839119c667b77b15fc4d0070eb","kind":"tag","published_at":"2015-09-07T18:55:44.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.1.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.1.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.1/manifests"},{"name":"v1.1.0","sha":"6a4c6f03a755340602bb786bcf87e47402e8dda7","kind":"tag","published_at":"2015-08-28T18:35:13.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.1.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.1.0/manifests"},{"name":"v1.0.3","sha":"37024a77d122665e47593d6159503e9189024604","kind":"tag","published_at":"2015-06-26T06:16:13.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.0.3","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.0.3/manifests"},{"name":"v1.0.2","sha":"0ca640f2c88f5a6767bb09da8cab5983665b6d98","kind":"tag","published_at":"2015-06-18T17:45:16.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.0.2","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.0.2/manifests"},{"name":"v1.0.1","sha":"87753fea0f7f96cea89629d492a82292356ab350","kind":"tag","published_at":"2015-06-06T13:26:32.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.0.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.0.1/manifests"},{"name":"v1.0.0","sha":"03bf4174c85cef51ab07e92212a9d7838a27093b","kind":"tag","published_at":"2014-12-19T17:36:32.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v1.0.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v1.0.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.0.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v1.0.0/manifests"},{"name":"v0.8.2","sha":"b624bf83a2930164b74630c8141b8eb1bb659b1a","kind":"tag","published_at":"2014-12-15T18:32:05.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.8.2","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.8.2","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.8.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.8.2/manifests"},{"name":"v0.8.1","sha":"d7cb99468c24cc6f88c1a71687175c264771bc9b","kind":"tag","published_at":"2014-12-07T16:54:52.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.8.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.8.1/manifests"},{"name":"v0.8.0","sha":"35855b5a02a066a51d1eaae670fc5c0efcc3a926","kind":"tag","published_at":"2014-12-03T17:54:24.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.8.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.8.0/manifests"},{"name":"v0.7.1","sha":"827e2f53efcebe2ad11d52d5dbb6e049d1ae7edb","kind":"tag","published_at":"2014-11-22T20:21:08.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.7.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"5385445fa6dfb94e3ab457890bcb9ec94134e997","kind":"tag","published_at":"2014-11-12T07:02:10.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.7.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"482d35f78b643877cbd6cb23fe6b4c2d0f692735","kind":"tag","published_at":"2014-10-23T17:43:55.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.6.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.6.0/manifests"},{"name":"v0.5.1","sha":"44b84324f5e52291753addaf9ab8fc89b2d507d2","kind":"tag","published_at":"2014-09-25T16:08:03.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.5.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.5.1/manifests"},{"name":"v0.5.0","sha":"36c792475bc13e4fa6d606146c4144a71d79d2f4","kind":"tag","published_at":"2014-09-23T16:58:48.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.5.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.5.0/manifests"},{"name":"v0.4.0","sha":"b210c14c7fb336205625be8d29ece52c2fba6abe","kind":"tag","published_at":"2014-06-16T18:31:45.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.4.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.4.0/manifests"},{"name":"v0.3.1","sha":"a29e4f06015320c2a294aad6a4564f0297e97e49","kind":"tag","published_at":"2014-05-07T16:29:13.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.3.1","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.3.1/manifests"},{"name":"v0.3.0","sha":"bf206e065016d76eb4e1b666c77ad892f329ae00","kind":"tag","published_at":"2014-05-07T16:20:33.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.3.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.3.0/manifests"},{"name":"v0.2.0","sha":"3b9d81924ae6b4011048096cf12a7cdad5508f30","kind":"tag","published_at":"2014-04-02T18:41:26.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.2.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.2.0/manifests"},{"name":"v0.1.0","sha":"35f85f2f78f842b15609c5973f1fdd261c0a6476","kind":"tag","published_at":"2014-03-27T05:17:09.000Z","download_url":"https://codeload.github.com/tkem/cachetools/tar.gz/v0.1.0","html_url":"https://github.com/tkem/cachetools/releases/tag/v0.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tkem%2Fcachetools/tags/v0.1.0/manifests"}]},"repo_metadata_updated_at":"2024-09-07T11:37:53.688Z","dependent_packages_count":1021,"downloads":236071381,"downloads_period":"last-month","dependent_repos_count":62196,"rankings":{"downloads":0.008437162398868686,"dependent_repos_count":0.022927071736056213,"dependent_packages_count":0.02549490377049451,"stargazers_count":2.2178732114591337,"forks_count":5.2104980310230795,"docker_downloads_count":0.010638161285530084,"average":1.2493114236121938},"purl":"pkg:pypi/cachetools","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/cachetools","docker_dependents_count":7523,"docker_downloads_count":4598678061,"usage_url":"https://repos.ecosyste.ms/usage/pypi/cachetools","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/cachetools/dependencies","status":null,"funding_links":[],"critical":true,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/cachetools/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/cachetools/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/cachetools/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/cachetools/related_packages","maintainers":[{"uuid":"tkem","login":"tkem","name":null,"email":null,"url":null,"packages_count":12,"html_url":"https://pypi.org/user/tkem/","role":null,"created_at":"2023-01-09T09:56:33.220Z","updated_at":"2023-01-09T09:56:33.220Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/tkem/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":690329,"maintainers_count":292761,"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":509,"unique_repositories_count_past_30_days":15,"recent_issues":[{"uuid":"4661140028","node_id":"PR_kwDOQIfwjs7mVYWi","number":39,"state":"open","title":"chore(deps): bump the python-minor-patch group with 3 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-15T00:17:24.000Z","updated_at":"2026-06-15T00:18:03.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":3,"packages":[{"name":"cachetools","old_version":"7.1.1","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"python-multipart","old_version":"0.0.30","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"coverage","old_version":"7.14.0","new_version":"7.14.1","repository_url":"https://github.com/coveragepy/coveragepy"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 3 updates: [cachetools](https://github.com/tkem/cachetools), [python-multipart](https://github.com/Kludex/python-multipart) and [coverage](https://github.com/coveragepy/coveragepy).\n\nUpdates `cachetools` from 7.1.1 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\u003c/blockquote\u003e\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.1.1...v7.1.4\"\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.30 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003eKludex/python-multipart#300\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003eKludex/python-multipart#297\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.30...0.0.32\"\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.0 to 7.14.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.14.1 — 2026-05-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the HTML report used typographic niceties to make file paths more\nreadable by adding a small amount of space around slashes. Those spaces\ninterfered with searching the page for file paths of interest. Now the report\nuses CSS to accomplish the same visual tweak so that searches with slashes\nwork correctly. Closes \u003ccode\u003eissue 2170\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAdd a 3.16 PyPI classifier \u0026lt;hugo-316_\u0026gt;\u003c/code\u003e_ since we test on the 3.16 main\nbranch.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2170: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2170\"\u003ecoveragepy/coveragepy#2170\u003c/a\u003e\n.. _hugo-316: \u003ca href=\"https://mastodon.social/@hugovk/116588523571204490\"\u003ehttps://mastodon.social/@​hugovk/116588523571204490\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/64d9b66fd852c1920ffe6cb8b58d7e4fdae90226\"\u003e\u003ccode\u003e64d9b66\u003c/code\u003e\u003c/a\u003e docs: correct the date for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6fa7dd44c25e1a660252faaf030dd8f2f1e20861\"\u003e\u003ccode\u003e6fa7dd4\u003c/code\u003e\u003c/a\u003e chore: bump actions/dependency-review-action (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2181\"\u003e#2181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/078afae263597b004eb9a85d880b6a65008e75ed\"\u003e\u003ccode\u003e078afae\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/cb4f028a36e008b664739d04f387b90ee5105044\"\u003e\u003ccode\u003ecb4f028\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ae2d09f562271c6169534e1c242d015dd0823dda\"\u003e\u003ccode\u003eae2d09f\u003c/code\u003e\u003c/a\u003e Merge branch 'nedbat/classifire-316-kits'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2c3568b2e041f2c0dbbc8eaa3919d46ee891b743\"\u003e\u003ccode\u003e2c3568b\u003c/code\u003e\u003c/a\u003e build: declare 3.16 compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/faa68f8601cf098701b68976dbb73b9fc23c9297\"\u003e\u003ccode\u003efaa68f8\u003c/code\u003e\u003c/a\u003e chore: bump github/codeql-action in the action-dependencies group (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2173\"\u003e#2173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/eb55feedf54b363e3d0b678f20abf3bfd3551a88\"\u003e\u003ccode\u003eeb55fee\u003c/code\u003e\u003c/a\u003e test: we don't need PyPy \u0026lt; 7.3.22 anymore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ac168fe53c04cdb2ff5231c0c4e5045021ee339b\"\u003e\u003ccode\u003eac168fe\u003c/code\u003e\u003c/a\u003e test: the text summary should show missing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/fed4bd2db3c1cb2916a07791041da693fbf8e996\"\u003e\u003ccode\u003efed4bd2\u003c/code\u003e\u003c/a\u003e chore: upgrade virtualenv\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.0...7.14.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/onprem-hipster-timer/backend/pull/39","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/onprem-hipster-timer%2Fbackend/issues/39","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/39/packages"},{"uuid":"4615885150","node_id":"PR_kwDOSrZluM7kDuDx","number":12,"state":"closed","title":"deps(py): bump the python-minor group across 1 directory with 42 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-15T19:17:10.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-08T19:15:21.000Z","updated_at":"2026-06-15T19:17:13.000Z","time_to_close":604909,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(py): bump","group_name":"python-minor","update_count":42,"packages":[{"name":"cachetools","old_version":"7.0.5","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"choreographer","old_version":"1.2.1","new_version":"1.3.0","repository_url":"https://github.com/plotly/choreographer"},{"name":"click","old_version":"8.3.2","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"debugpy","old_version":"1.8.20","new_version":"1.8.21","repository_url":"https://github.com/microsoft/debugpy"},{"name":"decorator","old_version":"5.2.1","new_version":"5.3.1","repository_url":"https://github.com/micheles/decorator"},{"name":"duckdb","old_version":"1.5.2","new_version":"1.5.3","repository_url":"https://github.com/duckdb/duckdb-python"},{"name":"flask-cors","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/corydolphin/flask-cors"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.1","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.11","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.12.0","new_version":"9.14.1","repository_url":"https://github.com/ipython/ipython"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"joserfc","old_version":"1.6.4","new_version":"1.7.1","repository_url":"https://github.com/authlib/joserfc"},{"name":"jupyter-client","old_version":"8.8.0","new_version":"8.9.0","repository_url":"https://github.com/jupyter/jupyter_client"},{"name":"kaleido","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/plotly/kaleido"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"matplotlib-inline","old_version":"0.2.1","new_version":"0.2.2","repository_url":"https://github.com/ipython/matplotlib-inline"},{"name":"mcp","old_version":"1.27.0","new_version":"1.27.2","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"narwhals","old_version":"2.19.0","new_version":"2.22.1","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"numpy","old_version":"2.4.4","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"orjson","old_version":"3.11.8","new_version":"3.11.9","repository_url":"https://github.com/ijl/orjson"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"plotly","old_version":"6.6.0","new_version":"6.8.0","repository_url":"https://github.com/plotly/plotly.py"},{"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":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-engineio","old_version":"4.13.1","new_version":"4.13.2","repository_url":"https://github.com/miguelgrinberg/python-engineio"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"python-socketio","old_version":"5.16.1","new_version":"5.16.2","repository_url":"https://github.com/miguelgrinberg/python-socketio"},{"name":"python-telegram-bot","old_version":"22.6","new_version":"22.7","repository_url":"https://github.com/python-telegram-bot/python-telegram-bot"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"tornado","old_version":"6.5.5","new_version":"6.5.7","repository_url":"https://github.com/tornadoweb/tornado"},{"name":"traitlets","old_version":"5.14.3","new_version":"5.15.1","repository_url":"https://github.com/ipython/traitlets"},{"name":"uvicorn","old_version":"0.44.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.8.1","repository_url":"https://github.com/jquast/wcwidth"},{"name":"wheel","old_version":"0.46.3","new_version":"0.47.0","repository_url":"https://github.com/pypa/wheel"},{"name":"wtforms","old_version":"3.2.1","new_version":"3.2.2","repository_url":"https://github.com/pallets-eco/wtforms"},{"name":"opengreeks","old_version":"0.1.0","new_version":"0.2.0","repository_url":"https://github.com/marketcalls/opengreeks"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 42 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.5` | `7.1.4` |\n| [choreographer](https://github.com/plotly/choreographer) | `1.2.1` | `1.3.0` |\n| [click](https://github.com/pallets/click) | `8.3.2` | `8.4.1` |\n| [debugpy](https://github.com/microsoft/debugpy) | `1.8.20` | `1.8.21` |\n| [decorator](https://github.com/micheles/decorator) | `5.2.1` | `5.3.1` |\n| [duckdb](https://github.com/duckdb/duckdb-python) | `1.5.2` | `1.5.3` |\n| [flask-cors](https://github.com/corydolphin/flask-cors) | `6.0.2` | `6.0.3` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.1` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.18` |\n| [ipython](https://github.com/ipython/ipython) | `9.12.0` | `9.14.1` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [joserfc](https://github.com/authlib/joserfc) | `1.6.4` | `1.7.1` |\n| [jupyter-client](https://github.com/jupyter/jupyter_client) | `8.8.0` | `8.9.0` |\n| [kaleido](https://github.com/plotly/kaleido) | `1.2.0` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [matplotlib-inline](https://github.com/ipython/matplotlib-inline) | `0.2.1` | `0.2.2` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.27.0` | `1.27.2` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.19.0` | `2.22.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.4` | `2.4.6` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.8` | `3.11.9` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [plotly](https://github.com/plotly/plotly.py) | `6.6.0` | `6.8.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| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.1` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [python-engineio](https://github.com/miguelgrinberg/python-engineio) | `4.13.1` | `4.13.2` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.32` |\n| [python-socketio](https://github.com/miguelgrinberg/python-socketio) | `5.16.1` | `5.16.2` |\n| [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) | `22.6` | `22.7` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.50` |\n| [tornado](https://github.com/tornadoweb/tornado) | `6.5.5` | `6.5.7` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14.3` | `5.15.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.44.0` | `0.49.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.8.1` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.47.0` |\n| [wtforms](https://github.com/pallets-eco/wtforms) | `3.2.1` | `3.2.2` |\n| [opengreeks](https://github.com/marketcalls/opengreeks) | `0.1.0` | `0.2.0` |\n\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 `choreographer` from 1.2.1 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/choreographer/blob/main/CHANGELOG.txt\"\u003echoreographer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ev1.3.0\nv1.3.0rc2\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCheck path validity for browser with is_file()\u003c/li\u003e\n\u003cli\u003eAdd option --verify_local in choreo_diagnose and fix local reporting logic\nv1.3.0rc1\u003c/li\u003e\n\u003cli\u003eWe now look for old download path as well as new download path\nv1.3.0rc0\u003c/li\u003e\n\u003cli\u003eChange to process group for better killing of multi-process chrome\u003c/li\u003e\n\u003cli\u003eAdd argument to Session/Target \u003ccode\u003esend_command(..., *, with_perf: bool)\u003c/code\u003e to\nreturn timing information about browser write/read.\u003c/li\u003e\n\u003cli\u003eUpdate default chrome from 135.0.7011.0/1418433 to 144.0.7527.0/1544685\u003c/li\u003e\n\u003cli\u003eFix: New chrome takes longer/doesn't populate targets right away, so add a\nretry loop to populate targets\u003c/li\u003e\n\u003cli\u003eAlter \u003ccode\u003eget_chrome\u003c/code\u003e verbose to print whole JSON\u003c/li\u003e\n\u003cli\u003eChange chrome download path to use XDG cache dir\u003c/li\u003e\n\u003cli\u003eDon't download chrome if we already have that version: add force argument\u003c/li\u003e\n\u003cli\u003eRemove unused system inspection code\u003c/li\u003e\n\u003cli\u003eAdd a set of helper functions to await for tab loading and send javascript\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/choreographer/commit/92147b1ccf024ae647f29ebf43057564011e06c9\"\u003e\u003ccode\u003e92147b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/296\"\u003e#296\u003c/a\u003e from plotly/cam/update-changelog-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/8851fc919bc7dfb27a48541543f1ff195c48eda3\"\u003e\u003ccode\u003e8851fc9\u003c/code\u003e\u003c/a\u003e Updates to release version v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/3128bddf909381a2b4205f0e28c0c3cb8b13498c\"\u003e\u003ccode\u003e3128bdd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/288\"\u003e#288\u003c/a\u003e from plotly/andrew/more_local_logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/a6f478e00fb81ad22db7c7c1d31028fb4ab20311\"\u003e\u003ccode\u003ea6f478e\u003c/code\u003e\u003c/a\u003e Add to changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/953e19ad5dc395a3554cfbaf25599a8a3db6d933\"\u003e\u003ccode\u003e953e19a\u003c/code\u003e\u003c/a\u003e Check browser is file whwen checking path validity\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/d062e355b819b84e57060d4e48fbe2aa6f063259\"\u003e\u003ccode\u003ed062e35\u003c/code\u003e\u003c/a\u003e Change default setting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c0c97fc64a55c773dd7484674996cf55d74249a1\"\u003e\u003ccode\u003ec0c97fc\u003c/code\u003e\u003c/a\u003e Add option to verify local with choreo_diagnose\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/7ade1922269a6999c06f2ff92b34a1770bba6d3e\"\u003e\u003ccode\u003e7ade192\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/286\"\u003e#286\u003c/a\u003e from plotly/andrew/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/edf284c8973dd9dc7f7b2f77a53481fe6f0d2671\"\u003e\u003ccode\u003eedf284c\u003c/code\u003e\u003c/a\u003e Update Roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c1b7abce535feb79748c888ba1130b985c13eb3f\"\u003e\u003ccode\u003ec1b7abc\u003c/code\u003e\u003c/a\u003e Changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/choreographer/compare/v1.2.1...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.2 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.3.2...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `debugpy` from 1.8.20 to 1.8.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/microsoft/debugpy/releases\"\u003edebugpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003edebugpy v1.8.21\u003c/h2\u003e\n\u003cp\u003eFixes for:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eReturn evaluate result in DAP response body instead of writing to stdout: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2027\"\u003e#2027\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent invalid \u003ccode\u003escopes\u003c/code\u003e request from crashing debug session: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2026\"\u003e#2026\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip uninitialized \u003ccode\u003e__slots__\u003c/code\u003e in variable resolver: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2024\"\u003e#2024\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003e-c\u003c/code\u003e arguments that are \u003ccode\u003ebytes\u003c/code\u003e instead of \u003ccode\u003estr\u003c/code\u003e: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2021\"\u003e#2021\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix evaluation of variables from chained exception frames: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2018\"\u003e#2018\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eContinueRequest\u003c/code\u003e with a specific \u003ccode\u003ethreadId\u003c/code\u003e no longer resumes all threads (in-process adapter): \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2012\"\u003e#2012\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid strong reference to exceptions during unwind: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2008\"\u003e#2008\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow error message on evaluate failures in the hover context: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2006\"\u003e#2006\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisplay \u003ccode\u003edlerror\u003c/code\u003e output when \u003ccode\u003edlopen\u003c/code\u003e fails: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2000\"\u003e#2000\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace removed \u003ccode\u003epkgutil.get_loader\u003c/code\u003e with \u003ccode\u003eimportlib.util.find_spec\u003c/code\u003e in \u003ccode\u003eget_fullname\u003c/code\u003e: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/1998\"\u003e#1998\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEnhancements:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd option to ignore all system exit codes: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2017\"\u003e#2017\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePull changes from pydevd up to March 2026: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2010\"\u003e#2010\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInfrastructure work:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSuppress Flawfinder false positives on Cython memcpy / read-loop iterators (TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816216\"\u003e#2816216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816217\"\u003e#2816217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816218\"\u003e#2816218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816219\"\u003e#2816219\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816220\"\u003e#2816220\u003c/a\u003e): \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2028\"\u003e#2028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2029\"\u003e#2029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2030\"\u003e#2030\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2031\"\u003e#2031\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2032\"\u003e#2032\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/maxbachmann\"\u003e\u003ccode\u003e@​maxbachmann\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/mfussenegger\"\u003e\u003ccode\u003e@​mfussenegger\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sambrightman\"\u003e\u003ccode\u003e@​sambrightman\u003c/code\u003e\u003c/a\u003e for the commits.\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/microsoft/debugpy/commit/858b05c08555cfc54efa7cf90e70184c7495b38e\"\u003e\u003ccode\u003e858b05c\u003c/code\u003e\u003c/a\u003e Fix TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816217\"\u003e#2816217\u003c/a\u003e: suppress Flawfinder false positive on Cython JoinPyUnicode ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/f0c34f133ad3eb7992ca50e45e5459f9d58f4be8\"\u003e\u003ccode\u003ef0c34f1\u003c/code\u003e\u003c/a\u003e Fix TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816216\"\u003e#2816216\u003c/a\u003e: suppress Flawfinder false positive on Cython DIGIT_PAIRS_8 ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/4c70e13d0e3fc8eee5013cd2a41c7a6d752d55d3\"\u003e\u003ccode\u003e4c70e13\u003c/code\u003e\u003c/a\u003e Fix TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816218\"\u003e#2816218\u003c/a\u003e: suppress Flawfinder false positive on Cython read-loop iter...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/19c2b8c029975a6ba2e4e521d8fbdf5f1b3ed8fd\"\u003e\u003ccode\u003e19c2b8c\u003c/code\u003e\u003c/a\u003e Fix TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816220\"\u003e#2816220\u003c/a\u003e: suppress Flawfinder false positive on Cython read-loop iter...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/ab9263839637357f3372ffb550395ffbf8ce9f77\"\u003e\u003ccode\u003eab92638\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2031\"\u003e#2031\u003c/a\u003e from StellaHuang95/stellahuang/tsa-2816219-flawfinde...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/12bd4fef7ea5c35248d9f175f5b0218b970fa64c\"\u003e\u003ccode\u003e12bd4fe\u003c/code\u003e\u003c/a\u003e Return evaluate result in DAP response body instead of writing to stdout (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2027\"\u003e#2027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/8bd57a7d446d6ec4d7dd4e580d00cdea193ddcd9\"\u003e\u003ccode\u003e8bd57a7\u003c/code\u003e\u003c/a\u003e Prevent invalid scopes request from crashing debug session (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2026\"\u003e#2026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/bf118c8d0ec97e584d2f3cfd781f04a745a1334c\"\u003e\u003ccode\u003ebf118c8\u003c/code\u003e\u003c/a\u003e Skip uninitialized \u003cstrong\u003eslots\u003c/strong\u003e in variable resolver (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2024\"\u003e#2024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/a55be0e6f0700646e0833097ab78b2e4ba68745b\"\u003e\u003ccode\u003ea55be0e\u003c/code\u003e\u003c/a\u003e Potential fix when \u003ccode\u003e-c\u003c/code\u003e arguments are bytes instead of a str (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2021\"\u003e#2021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/0f037adec6fb2f61ad225849e953188ec349adbc\"\u003e\u003ccode\u003e0f037ad\u003c/code\u003e\u003c/a\u003e Fix evaluation of variables from chained exception frames (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/microsoft/debugpy/compare/v1.8.20...v1.8.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `decorator` from 5.2.1 to 5.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/micheles/decorator/blob/master/CHANGES.md\"\u003edecorator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.3.1 (2026-05-18)\u003c/h2\u003e\n\u003cp\u003eAdded license SPDX identifier to pyproject.toml (reported by\nChristian Lackas).\u003c/p\u003e\n\u003ch2\u003e5.3.0 (2026-05-17)\u003c/h2\u003e\n\u003cp\u003eAdded official support for Python 3.14 (thanks to Hugo van Kemenade,\nDavid Cain and the GitHub user bersbersbers).\nFixed a bug with \u0026quot;return await\u0026quot; contributed by Kadir Can Ozden.\nMoved decorator.py to a package structure (\u003ccode\u003edecorator/__init__.py\u003c/code\u003e) and\nadded a stub file (\u003ccode\u003edecorator/__init__.pyi\u003c/code\u003e) contributed by Marco Gorelli.\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/micheles/decorator/commit/426e9e35d563ffe356e54bd0f970d153b8f25370\"\u003e\u003ccode\u003e426e9e3\u003c/code\u003e\u003c/a\u003e Bumped the version to 5.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/062ff0e0c33733f2148a5590d118a8570df846d5\"\u003e\u003ccode\u003e062ff0e\u003c/code\u003e\u003c/a\u003e Fixed the dependency on setuptools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/086ff5d95d4dc550117c12647a4427d70bf8833d\"\u003e\u003ccode\u003e086ff5d\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/5807a83ead31f0de5303fa950ddea49d850d7355\"\u003e\u003ccode\u003e5807a83\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/093aced11439251e496b47a9a9369501075e8d1a\"\u003e\u003ccode\u003e093aced\u003c/code\u003e\u003c/a\u003e Updated changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/e9ced7e63ad9502b3e2a3e3db5f5f1ccc16c5fd6\"\u003e\u003ccode\u003ee9ced7e\u003c/code\u003e\u003c/a\u003e Added license SPDX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/b3e82ddc04e8d0c18c51eecb30b4a59aee5aac1d\"\u003e\u003ccode\u003eb3e82dd\u003c/code\u003e\u003c/a\u003e Fixed CHANGES.md [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/f1ce8da8522193421436c368849afe886666b4e5\"\u003e\u003ccode\u003ef1ce8da\u003c/code\u003e\u003c/a\u003e Doc fix [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/c924d7c6aa2e47a0627706c385101ff8d558d091\"\u003e\u003ccode\u003ec924d7c\u003c/code\u003e\u003c/a\u003e Updated supported versions [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/8b83e8cca35f5c773654ce4ae89b4e3f84f430d3\"\u003e\u003ccode\u003e8b83e8c\u003c/code\u003e\u003c/a\u003e Fixed CHANGES [ci skip]\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/micheles/decorator/compare/5.2.1...5.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `duckdb` 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/duckdb/duckdb-python/releases\"\u003educkdb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.3 Bugfix Release\u003c/h2\u003e\n\u003cp\u003eSee the DuckDB core release notes here: \u003ca href=\"https://github.com/duckdb/duckdb/releases/tag/v1.5.3\"\u003ehttps://github.com/duckdb/duckdb/releases/tag/v1.5.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed in DuckDB Python\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExport all symbols by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/445\"\u003educkdb/duckdb-python#445\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix concjunction OR by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/465\"\u003educkdb/duckdb-python#465\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse recursive mutex to deal with GIL \u0026lt;-\u0026gt; internal lock deadlocks by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/462\"\u003educkdb/duckdb-python#462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow self-joining of Polars lazyframes by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/466\"\u003educkdb/duckdb-python#466\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/duckdb/duckdb-python/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/duckdb/duckdb-python/commit/811b135ee5a0449378ab9635e0284b96485d58d6\"\u003e\u003ccode\u003e811b135\u003c/code\u003e\u003c/a\u003e DuckDB submodule pinned at v1.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/289bfbdc2914894ccbb41028a84abef34448126e\"\u003e\u003ccode\u003e289bfbd\u003c/code\u003e\u003c/a\u003e Bump submodule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/f87d6d938fca2d7b1ae713396e77c86622d17e79\"\u003e\u003ccode\u003ef87d6d9\u003c/code\u003e\u003c/a\u003e Allow self-joining of Polars lazyframes (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/466\"\u003e#466\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/c88229d86bf8e5ff266abc06cc620dc13d9d3529\"\u003e\u003ccode\u003ec88229d\u003c/code\u003e\u003c/a\u003e Allow self-joining of Polars lazyframes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/559f6af94b5c10e863b5e09b318c5c9f6d6c6dda\"\u003e\u003ccode\u003e559f6af\u003c/code\u003e\u003c/a\u003e Only disable unity builds for editable installs on OSX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/97df04987ffd69a0c5a94b4e8802b78c0302023e\"\u003e\u003ccode\u003e97df049\u003c/code\u003e\u003c/a\u003e fix .clangd\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/fd8889e3024da05d7afe90f4e20d6b9bd2b3e9c0\"\u003e\u003ccode\u003efd8889e\u003c/code\u003e\u003c/a\u003e Use recursive mutex to deal with GIL \u0026lt;-\u0026gt; internal lock deadlocks (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/462\"\u003e#462\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/7b77328d1bbcf1a95726c332a47eb8ca817222c4\"\u003e\u003ccode\u003e7b77328\u003c/code\u003e\u003c/a\u003e [duckdb-labs bot] Bump DuckDB submodule (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/9a866338302f8b7d31acde303cec9e3238cb2874\"\u003e\u003ccode\u003e9a86633\u003c/code\u003e\u003c/a\u003e Fix concjunction OR (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/3d778deea42aab1eccce0693538805b9d6183b44\"\u003e\u003ccode\u003e3d778de\u003c/code\u003e\u003c/a\u003e Fix concjunction OR\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duckdb/duckdb-python/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 `flask-cors` from 6.0.2 to 6.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/corydolphin/flask-cors/releases\"\u003eflask-cors's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDerive package version from git tag via setuptools-scm by \u003ca href=\"https://github.com/corydolphin\"\u003e\u003ccode\u003e@​corydolphin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/pull/405\"\u003ecorydolphin/flask-cors#405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CI/CD security with least privilege and build separation by \u003ca href=\"https://github.com/corydolphin\"\u003e\u003ccode\u003e@​corydolphin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/pull/406\"\u003ecorydolphin/flask-cors#406\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.3\"\u003ehttps://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.3-pre\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDerive package version from git tag via setuptools-scm by \u003ca href=\"https://github.com/corydolphin\"\u003e\u003ccode\u003e@​corydolphin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/pull/405\"\u003ecorydolphin/flask-cors#405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CI/CD security with least privilege and build separation by \u003ca href=\"https://github.com/corydolphin\"\u003e\u003ccode\u003e@​corydolphin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/pull/406\"\u003ecorydolphin/flask-cors#406\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.3\"\u003ehttps://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.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/corydolphin/flask-cors/commit/c8e8871076c7ed378eb0ae773a2079b6d62ed7a9\"\u003e\u003ccode\u003ec8e8871\u003c/code\u003e\u003c/a\u003e Harden release publishing workflow (\u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/issues/406\"\u003e#406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/corydolphin/flask-cors/commit/e1d4034e2b2d5232f6fed27bc753f90331747b64\"\u003e\u003ccode\u003ee1d4034\u003c/code\u003e\u003c/a\u003e Derive package version from git tag via setuptools-scm (\u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\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-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.5.1\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.1 (2026-05-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd preliminary support for Python 3.15b1. This has not been\nreviewed by CPython core developers, but all tests pass. Binary\nwheels of this version won't work on earlier Python 3.15 builds and\nmay not work on later 3.15 builds.\u003c/li\u003e\n\u003cli\u003eFix the discrepancy in the way the two \u003ccode\u003egetcurrent\u003c/code\u003e APIs behave\nduring greenlet teardown. One API (the C API used by, e.g.,  gevent) raised a\n\u003ccode\u003eRuntimeError\u003c/code\u003e; the other (the Python \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e API)\nreturned \u003ccode\u003eNone\u003c/code\u003e. This second way is incompatible with greenlet's type\nannotations, so \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e now raises a\n\u003ccode\u003eRuntimeError\u003c/code\u003e as well.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.0 (2026-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the \u003ccode\u003eatexit\u003c/code\u003e callback. This callback caused greenlet APIs\nto become unavailable far too soon during interpreter shutdown. Now\nthey remain available while all \u003ccode\u003eatexit\u003c/code\u003e callbacks run. Sometime\nafter \u003ccode\u003ePy_IsFinalizing\u003c/code\u003e becomes true, they may begin misbehaving.\nBecause the order in which C extensions are finalized is undefined,\nC extensions that are sensitive to this need to check the results of\nthat function before invoking greenlet APIs. As a convenience,\n\u003ccode\u003ePyGreenlet_GetCurrent\u003c/code\u003e sets an exception and returns \u003ccode\u003eNULL\u003c/code\u003e\nwhen this happens (and \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e begins returning\n\u003ccode\u003eNone\u003c/code\u003e); other greenlet C API functions have undefined behaviour.\nMethods invoked directly on pre-existing \u003ccode\u003egreenlet.greenlet\u003c/code\u003e\nobjects will continue to function at least until the greenlet C\nextension has been garbage collected and finalized.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 508 \u0026lt;https://github.com/python-greenlet/greenlet/pull/508\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\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/python-greenlet/greenlet/commit/b5e5fc43a51c27ecffa1b1c7107c91464a6b26e2\"\u003e\u003ccode\u003eb5e5fc4\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c8e177413d34bc36ed56d2c185c232ab0538be90\"\u003e\u003ccode\u003ec8e1774\u003c/code\u003e\u003c/a\u003e Tweak wording in CHANGES about greenlet.getcurrent.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/7fb10c570f37b3eb4c8909c6164fdfac3269ddb6\"\u003e\u003ccode\u003e7fb10c5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/510\"\u003e#510\u003c/a\u003e from python-greenlet/315\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/9718ce5a23ea3360232b78a806a837d6c3d6183d\"\u003e\u003ccode\u003e9718ce5\u003c/code\u003e\u003c/a\u003e Add Py 3.15; make both API versions of getcurrent() consistent in raising Run...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/276e08afc4ddba87e4366390e3eeaecd61ccb3b8\"\u003e\u003ccode\u003e276e08a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/509\"\u003e#509\u003c/a\u003e from python-greenlet/dependabot/github_actions/github...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/32b0ad69828eb69d879c70dbee948e685268901b\"\u003e\u003ccode\u003e32b0ad6\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/173b692dc84288ef41572612ac744754f98eaa90\"\u003e\u003ccode\u003e173b692\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c7acc72000572811d6462ebe01733a974f194990\"\u003e\u003ccode\u003ec7acc72\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/d08f99bf40801c5d57af6e13631c0ba68300ecf7\"\u003e\u003ccode\u003ed08f99b\u003c/code\u003e\u003c/a\u003e CHANGES: Update link from \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/507\"\u003e#507\u003c/a\u003e to more full description in \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/fd3391e33cedc7a17a86059f18dfbec2b3a320bd\"\u003e\u003ccode\u003efd3391e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e from python-greenlet/issue507-remove-atexit\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.5.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.11 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.11...v3.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 9.12.0 to 9.14.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/352c35b9e841fe20c2a0dc09af67e180e6854322\"\u003e\u003ccode\u003e352c35b\u003c/code\u003e\u003c/a\u003e release 9.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/df72b1f8d94e874947f6425dbbcca614942aa3f5\"\u003e\u003ccode\u003edf72b1f\u003c/code\u003e\u003c/a\u003e Add forward compatibility for pdb.Pdb's mode argument (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15235\"\u003e#15235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/a957d81c3177d33fc9d0b5fe123e58dd8cbf87e7\"\u003e\u003ccode\u003ea957d81\u003c/code\u003e\u003c/a\u003e Handle pdb.Pdb \u003ccode\u003emode\u003c/code\u003e argument and test signature compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3e1c0544e141d55cd232259d4828a633e952f5fc\"\u003e\u003ccode\u003e3e1c054\u003c/code\u003e\u003c/a\u003e ci: add zizmor GitHub Actions security analysis and harden workflows (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15238\"\u003e#15238\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0181ae38b68b929f464c349ad139e1080ee60a93\"\u003e\u003ccode\u003e0181ae3\u003c/code\u003e\u003c/a\u003e ci: add zizmor GitHub Actions security analysis and harden workflows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/fb831cc06fe27a12f5d52f6608fa90857428748c\"\u003e\u003ccode\u003efb831cc\u003c/code\u003e\u003c/a\u003e back to dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/9d1f24b9687279362b66f4e8c8a36ffde895a05d\"\u003e\u003ccode\u003e9d1f24b\u003c/code\u003e\u003c/a\u003e release 9.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d8b9d11f2796300d914a88dc08de35ce93bc5aa0\"\u003e\u003ccode\u003ed8b9d11\u003c/code\u003e\u003c/a\u003e Add IPython 9.14 release notes (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15228\"\u003e#15228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/80cc1b963349ebc472b69f7da505cccebb2e6ad5\"\u003e\u003ccode\u003e80cc1b9\u003c/code\u003e\u003c/a\u003e Apply suggestions from code review\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/99feaadc543d43abc9287734651f4b618305a6bb\"\u003e\u003ccode\u003e99feaad\u003c/code\u003e\u003c/a\u003e Prepare release notes for 9.14\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/9.12.0...9.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jedi` from 0.19.2 to 0.20.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.20.0 (2026-05-02)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.14 support\u003c/li\u003e\n\u003cli\u003eRemoved support for Python 3.8 and 3.9\u003c/li\u003e\n\u003cli\u003eUpgraded Typeshed\u003c/li\u003e\n\u003cli\u003eBetter support for Final/ClassVar\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__new__\u003c/code\u003e is now also recognized as a signature and TypeVar inference\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eSelf\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eTypeAlias\u003c/code\u003e, generics for \u003ccode\u003etype[...]\u003c/code\u003e and \u003ccode\u003etuple[...]\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/davidhalter/jedi/commit/3102215478fe07b965dcd8221c17436d1dd7e8ac\"\u003e\u003ccode\u003e3102215\u003c/code\u003e\u003c/a\u003e Move the type parameter syntax tests so that it works for all versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/1b37f2eb946e825cbc2887c6dd34ee046f0ae68c\"\u003e\u003ccode\u003e1b37f2e\u003c/code\u003e\u003c/a\u003e Prepare for the 0.20.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8e4df5cc0ec511db1af6d358182b1fb7c1e0cbff\"\u003e\u003ccode\u003e8e4df5c\u003c/code\u003e\u003c/a\u003e Make sure the new generic syntax does not fail with latest parso\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4c9dbcca0329454b638bfa32e2825bedcfdf0eac\"\u003e\u003ccode\u003e4c9dbcc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2098\"\u003e#2098\u003c/a\u003e from davidhalter/updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/fedb1a5eb0d74446f6d431db2920ab5f1e1d5b18\"\u003e\u003ccode\u003efedb1a5\u003c/code\u003e\u003c/a\u003e Fix 3.10 tests in one more case\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/87e782f9c82de7297e243a770ac8888570bffa8e\"\u003e\u003ccode\u003e87e782f\u003c/code\u003e\u003c/a\u003e Fix flake8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/cd52d982e10ac54f0ebef06e0bd414f79589998a\"\u003e\u003ccode\u003ecd52d98\u003c/code\u003e\u003c/a\u003e Fixes to get the tests passing for 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/d0b11806d4d1def377234bc2dc512992c997a977\"\u003e\u003ccode\u003ed0b1180\u003c/code\u003e\u003c/a\u003e Finally make tests work for 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8520a9958b489bd8d30cf20b4d2798f7289aab45\"\u003e\u003ccode\u003e8520a99\u003c/code\u003e\u003c/a\u003e Implement support for TypeVar inference for \u003cstrong\u003enew\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/55e5f0cb92dd92d5bdc80ecfc38664a1afd921d1\"\u003e\u003ccode\u003e55e5f0c\u003c/code\u003e\u003c/a\u003e Implement new-style unions with TypeVars\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.2...v0.20.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `joserfc` from 1.6.4 to 1.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/authlib/joserfc/releases\"\u003ejoserfc's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.7.1\u003c/h2\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ejwe\u003c/strong\u003e: When decrypt, use the original aad base64 value  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/d6a3d15\"\u003e\u003c!-- raw HTML omitted --\u003e(d6a3d)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/authlib/joserfc/compare/1.7.0...1.7.1\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003ch2\u003e1.7.0\u003c/h2\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ejwk\u003c/strong\u003e: As_dict, as_pem, as_der export public key by default  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/382b39d\"\u003e\u003c!-- raw HTML omitted --\u003e(382b3)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etyping\u003c/strong\u003e: Update type hints for dropping python 3.9  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/1ddca8f\"\u003e\u003c!-- raw HTML omitted --\u003e(1ddca)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etyping\u003c/strong\u003e: Use Iterator for _filter_keys_by_parameters return value  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/c133016\"\u003e\u003c!-- raw HTML omitted --\u003e(c1330)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.7...1.7.0\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003ch2\u003e1.6.9\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWE\u003c/strong\u003e: use the original base64 \u003ccode\u003eaad\u003c/code\u003e when decrypt.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.8...1.6.9\"\u003ehttps://github.com/authlib/joserfc/compare/1.6.8...1.6.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.6.8\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty OctKey.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.7...1.6.8\"\u003ehttps://github.com/authlib/joserfc/compare/1.6.7...1.6.8\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.6.7\u003c/h2\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ejws\u003c/strong\u003e: Validate payload size for b64=false  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/4d4ea2e\"\u003e\u003c!-- raw HTML omitted --\u003e(4d4ea)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etyping\u003c/strong\u003e: Accept any Collection for algorithms, not just list  -  by \u003ca href=\"https://github.com/jonathangreen\"\u003e\u003ccode\u003e@​jonathangreen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/102a7a7\"\u003e\u003c!-- raw HTML omitted --\u003e(102a7)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etyping\u003c/strong\u003e: Use cast for type hints  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/75d9f95\"\u003e\u003c!-- raw HTML omitted --\u003e(75d9f)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.5...1.6.7\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003ch2\u003e1.6.5\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eNo significant changes\u003c/em\u003e\u003c/p\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.4...1.6.5\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/authlib/joserfc/blob/main/docs/changelog.rst\"\u003ejoserfc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on June 8, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWE\u003c/strong\u003e: use the original \u003ccode\u003eaad\u003c/code\u003e value for decrypting.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on June 2, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.9 support.\u003c/li\u003e\n\u003cli\u003eUpdate type hints.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJWK\u003c/strong\u003e: export public key by default in \u003ccode\u003e.as_dict\u003c/code\u003e, \u003ccode\u003e.as_pem\u003c/code\u003e, \u003ccode\u003e.as_der\u003c/code\u003e methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.9\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on June 8, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWE\u003c/strong\u003e: use the original \u003ccode\u003eaad\u003c/code\u003e value for decrypting.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.8\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 27, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty OctKey.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.7\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 23, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate for type hints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.6\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 18, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWS\u003c/strong\u003e: validate payload size when \u003ccode\u003eb64=false\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.5\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 3, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWS\u003c/strong\u003e: increase registry's payload max size.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/51aef508022a4cc61a34d57b8862fb46049c9203\"\u003e\u003ccode\u003e51aef50\u003c/code\u003e\u003c/a\u003e chore: release 1.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/d6a3d15139edff276a06f1c1ebb4d16a069642ab\"\u003e\u003ccode\u003ed6a3d15\u003c/code\u003e\u003c/a\u003e fix(jwe): when decrypt, use the original aad base64 value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/3c9efedc9488244a47e9792235e02983df14b5ff\"\u003e\u003ccode\u003e3c9efed\u003c/code\u003e\u003c/a\u003e chore: release 1.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/da5dba115da1a8513c2a0a34f9c0171db1d3dc33\"\u003e\u003ccode\u003eda5dba1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/joserfc/issues/100\"\u003e#100\u003c/a\u003e from authlib/export-public\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/382b39dc0b8bfcf50222e7d2ba4d66d64f55add7\"\u003e\u003ccode\u003e382b39d\u003c/code\u003e\u003c/a\u003e fix(jwk): as_dict, as_pem, as_der export public key by default\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/955aaa05183770fa761326e3a4ea2bfe1d836d28\"\u003e\u003ccode\u003e955aaa0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/c133016e7e5b1d11732d18625be3da78308d267e\"\u003e\u003ccode\u003ec133016\u003c/code\u003e\u003c/a\u003e fix(typing): use Iterator for _filter_keys_by_parameters return value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/dbb26fcbd98e67aa5f9ce32e62e8a8de8925ace5\"\u003e\u003ccode\u003edbb26fc\u003c/code\u003e\u003c/a\u003e Reject empty oct key material and empty HMAC keys at sign/verify entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/1ddca8f3c73ff47e3bc3ac06cb0c08a9535677ec\"\u003e\u003ccode\u003e1ddca8f\u003c/code\u003e\u003c/a\u003e fix(typing): update type hints for dropping python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/fe1d746e7e85e523084b2aa5a269fb111c40f099\"\u003e\u003ccode\u003efe1d746\u003c/code\u003e\u003c/a\u003e chore: drop python 3.9\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.4...1.7.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jupyter-client` from 8.8.0 to 8.9.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jupyter/jupyter_client/releases\"\u003ejupyter-client's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.9.0\u003c/h2\u003e\n\u003ch2\u003e8.9.0\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/jupyter_client/compare/v8.8.0...d67bf2015d256bac3b766b2a673e980dcc169eac\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ZMQ Curve for transport encryption \u003ca href=\"https://redirect.github.com/jupyter/jupyter_client/pull/1110\"\u003e#1110\u003c/a\u003e (\u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance and upkeep improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTemporarily pin Python to 3.14 in pre-releases test \u003ca href=\"https://redirect.github.com/jupyter/jupyter_client/pull/1118\"\u003e#1118\u003c/a\u003e (\u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI: fix testing of nbconvert \u003ca href=\"https://redirect.github.com/jupyter/jupyter_client/pull/1116\"\u003e#1116\u003c/a\u003e (\u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate pre-commit, and fix issues \u003ca href=\"https://redirect.github.com/jupyter/jupyter_client/pull/1115\"\u003e#1115\u003c/a\u003e (\u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove \u003ccode\u003e3.14t\u003c/code\u003e testing until \u003ccode\u003emsgpack\u003c/code\u003e supports it \u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/naguht060/TradeNeuron/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/naguht060%2FTradeNeuron/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"},{"uuid":"4606167189","node_id":"PR_kwDOSXLGM87jkUY4","number":17,"state":"closed","title":"chore(deps): bump the uv-dependencies group across 1 directory with 26 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-14T04:29:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-07T04:33:29.000Z","updated_at":"2026-06-14T04:29:59.000Z","time_to_close":604588,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv-dependencies","update_count":26,"packages":[{"name":"apprise","old_version":"1.10.0","new_version":"1.11.0","repository_url":"https://github.com/caronc/apprise"},{"name":"click","old_version":"8.4.0","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"cyclopts","old_version":"4.15.0","new_version":"4.16.1","repository_url":"https://github.com/BrianPugh/cyclopts"},{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"opentelemetry-api","old_version":"1.41.1","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydocket","old_version":"0.20.3","new_version":"0.21.1","repository_url":"https://github.com/chrisguidry/docket"},{"name":"uv","old_version":"0.11.15","new_version":"0.11.19","repository_url":"https://github.com/astral-sh/uv"},{"name":"prefect-shell","old_version":"0.3.5","new_version":"0.3.6","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"prefect-dask","old_version":"0.3.6","new_version":"0.3.7","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"prefect-github","old_version":"0.4.2","new_version":"0.4.3","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"prefect-dbt","old_version":"0.7.24","new_version":"0.7.25","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"prefect-snowflake","old_version":"0.28.7","new_version":"0.28.8","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"moto","old_version":"5.2.1","new_version":"5.2.2","repository_url":"https://github.com/getmoto/moto"},{"name":"pyright","old_version":"1.1.409","new_version":"1.1.410","repository_url":"https://github.com/RobertCraigie/pyright-python"},{"name":"redis","old_version":"7.4.0","new_version":"8.0.0","repository_url":"https://github.com/redis/redis-py"},{"name":"virtualenv","old_version":"21.3.3","new_version":"21.4.2","repository_url":"https://github.com/pypa/virtualenv"},{"name":"ruff","old_version":"0.15.14","new_version":"0.15.16","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-dependencies group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [apprise](https://github.com/caronc/apprise) | `1.10.0` | `1.11.0` |\n| [click](https://github.com/pallets/click) | `8.4.0` | `8.4.1` |\n| [cyclopts](https://github.com/BrianPugh/cyclopts) | `4.15.0` | `4.16.1` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.3` | `7.1.4` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.42.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.49.0` |\n| [pydocket](https://github.com/chrisguidry/docket) | `0.20.3` | `0.21.1` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.15` | `0.11.19` |\n| [prefect-shell](https://github.com/PrefectHQ/prefect) | `0.3.5` | `0.3.6` |\n| [prefect-dask](https://github.com/PrefectHQ/prefect) | `0.3.6` | `0.3.7` |\n| [prefect-github](https://github.com/PrefectHQ/prefect) | `0.4.2` | `0.4.3` |\n| [prefect-dbt](https://github.com/PrefectHQ/prefect) | `0.7.24` | `0.7.25` |\n| [prefect-snowflake](https://github.com/PrefectHQ/prefect) | `0.28.7` | `0.28.8` |\n| [moto](https://github.com/getmoto/moto) | `5.2.1` | `5.2.2` |\n| [pyright](https://github.com/RobertCraigie/pyright-python) | `1.1.409` | `1.1.410` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.0.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.3.3` | `21.4.2` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.16` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n\n\nUpdates `apprise` from 1.10.0 to 1.11.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/caronc/apprise/releases\"\u003eapprise's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.11.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eA big win for this release is priortization of grouped/tagged content. Basically, this release allows you to tag multiple items and provide a weight to them.   Apprise will attempt to notify the highest priority/weighted services first (of same level), and only if this level fails will it try the next.  Tagging is no longer just a \u003ccode\u003etag\u003c/code\u003e.  It's now \u003ccode\u003eweight:tag\u003c/code\u003e too;  for example \u003ccode\u003e100:friends\u003c/code\u003e  associates the weight of \u003ccode\u003e100\u003c/code\u003e with the tag \u003ccode\u003efriends\u003c/code\u003e.  You can still continue to notify friends with your Apprise calls, but if there are weight categories, then these will be factored into the order.  Highest priority (weighted) tags have a lower integer value (zero being the  higest priority).  Only the next priority will be notified if the first fails.\u003c/p\u003e\n\u003cp\u003eThis releae also allows you to set up a notifiation service to gracefully fail and not have Apprise itself report a failure.  This is useful for situations where you notify several end points and you really don't care if they're unavailable or not.   Apprise wil do it's usual best effort to send the notification, but not treat it as a failure if it can't get through. Use \u003ccode\u003eoptional=yes\u003c/code\u003e on your Apprise URL.\u003c/p\u003e\n\u003cp\u003eThirdly, this release introduces retries! You can now have Apprise attempt to notify your endpoint a second, or a third, (up to 10x) tries before giving up and deeming it unable to send the notification.  Use \u003ccode\u003eretry=X\u003c/code\u003e on your Apprise URL\u003c/p\u003e\n\u003ch3\u003e:mega: New Notification Services:\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded Zoom (Incoming Webhook) Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1596\"\u003ecaronc/apprise#1596\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded WeChat Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1598\"\u003ecaronc/apprise#1598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRingCentral Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/878\"\u003ecaronc/apprise#878\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSession Open Group Server Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1615\"\u003ecaronc/apprise#1615\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded HumHub Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1623\"\u003ecaronc/apprise#1623\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAmazon Chime Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1627\"\u003ecaronc/apprise#1627\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGroupMe Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1629\"\u003ecaronc/apprise#1629\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:lady_beetle:  Bugfixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimproved robustness of windows test cases preventing others from passing in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1609\"\u003ecaronc/apprise#1609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle XMPP SASL SCRAM-PLUS / Channel Binding in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1619\"\u003ecaronc/apprise#1619\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTRACE logging during apprise init cleaned up in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1622\"\u003ecaronc/apprise#1622\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efixed mastodon error: AttributeError -  'list' object has no attribute 'union' in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1631\"\u003ecaronc/apprise#1631\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:bulb: Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eo365:// saveToSentItems configurable - ?savesent=no in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1599\"\u003ecaronc/apprise#1599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdated WhatsApp Buisness Graph API to v21 in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1603\"\u003ecaronc/apprise#1603\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:fire: Built in retries, escalations, priorities, and optional service calls in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1601\"\u003ecaronc/apprise#1601\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSlack Template/Payload support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1604\"\u003ecaronc/apprise#1604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded Slack workflows and trigger support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1605\"\u003ecaronc/apprise#1605\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:rocket: Pushover E2EE Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1612\"\u003ecaronc/apprise#1612\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWKD support added to email plugin in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1614\"\u003ecaronc/apprise#1614\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1618\"\u003ecaronc/apprise#1618\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAmazon SNS/SES Improvements in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1620\"\u003ecaronc/apprise#1620\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNotifico Standalone Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1275\"\u003ecaronc/apprise#1275\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:heart: Life-Cycle Support\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate LoC badge by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1593\"\u003ecaronc/apprise#1593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTwitter/X migration to API v2 in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1607\"\u003ecaronc/apprise#1607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eimprovements to workflow:// based on recent slack:// changes in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1608\"\u003ecaronc/apprise#1608\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:unlock: Added redirect= for allowing url redirection control in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1610\"\u003ecaronc/apprise#1610\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003emqtt:// now depends on paho-mqtt v2.1.0+ in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1613\"\u003ecaronc/apprise#1613\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:skull: Retire msteams:// as it is no longer in service upstream in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1625\"\u003ecaronc/apprise#1625\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstallation\u003c/h2\u003e\n\u003cp\u003eApprise is available \u003ca href=\"https://pypi.org/project/apprise/\"\u003eon PyPI\u003c/a\u003e through \u003cem\u003epip\u003c/em\u003e:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e# Install Apprise v1.11.0 from PyPI\r\npip install apprise==1.11.0\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/caronc/apprise/commit/158c4e1febc3e6093b0f357776b315a90c8a89b5\"\u003e\u003ccode\u003e158c4e1\u003c/code\u003e\u003c/a\u003e bumped version to v1.11.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/21db421ee89b24f1716a4fce74a4404a94bbabe7\"\u003e\u003ccode\u003e21db421\u003c/code\u003e\u003c/a\u003e GroupMe Support Added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1629\"\u003e#1629\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/f1e4ad2fd6659529597b1e07a1e44192faebff54\"\u003e\u003ccode\u003ef1e4ad2\u003c/code\u003e\u003c/a\u003e fixed mastodon error: AttributeError - 'list' object has no attribute 'union'...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/e17fe9dd64dd79e373877cf8ee07595cc50a01cc\"\u003e\u003ccode\u003ee17fe9d\u003c/code\u003e\u003c/a\u003e Amazon Chime Support (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1627\"\u003e#1627\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/dfdac59c9945385c4c75613e57d19558ec995d50\"\u003e\u003ccode\u003edfdac59\u003c/code\u003e\u003c/a\u003e HumHub Support added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1623\"\u003e#1623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/9de0397c30a7a2e58eb57c8da995ec54eada80bc\"\u003e\u003ccode\u003e9de0397\u003c/code\u003e\u003c/a\u003e Notifico Standalone Support Added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/c3e67e61d35a1b0609d176786db1e0b2cc1287da\"\u003e\u003ccode\u003ec3e67e6\u003c/code\u003e\u003c/a\u003e Retired msteams:// - as it is no longer in service upstream (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1625\"\u003e#1625\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/b463f23979455b61c548a550e40a3c75f0191b30\"\u003e\u003ccode\u003eb463f23\u003c/code\u003e\u003c/a\u003e TRACE logging during apprise init cleaned up (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1622\"\u003e#1622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/1e2fdeb72bd8165ad613b162794778ff1c684e67\"\u003e\u003ccode\u003e1e2fdeb\u003c/code\u003e\u003c/a\u003e Amazon SNS/SES Improvements (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1620\"\u003e#1620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/4706d0a4599a5072c8ae17375ee81862bcaac460\"\u003e\u003ccode\u003e4706d0a\u003c/code\u003e\u003c/a\u003e Handle XMPP SASL SCRAM-PLUS / Channel Binding (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1619\"\u003e#1619\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/caronc/apprise/compare/v1.10.0...v1.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.0 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\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.1\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type\nconversion again. {issue}\u003ccode\u003e3458\u003c/code\u003e {pr}\u003ccode\u003e3484\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. {issue}\u003ccode\u003e3277\u003c/code\u003e {pr}\u003ccode\u003e3466\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eEnum\u003c/code\u003e values used as \u003ccode\u003eChoice\u003c/code\u003e options produces a\nvalid completion result. {issue}\u003ccode\u003e3015\u003c/code\u003e {pr}\u003ccode\u003e3471\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. {issue}\u003ccode\u003e3487\u003c/code\u003e {pr}\u003ccode\u003e3493\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e {pr}\u003ccode\u003e3482\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eopen_url\u003c/code\u003e on Windows when the file path contains spaces.\n{issue}\u003ccode\u003e2994\u003c/code\u003e {pr}\u003ccode\u003e3478\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/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.4.0...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cyclopts` from 4.15.0 to 4.16.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/BrianPugh/cyclopts/releases\"\u003ecyclopts's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.16.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix fish completion for positional args and run fish tests in ci by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/823\"\u003eBrianPugh/cyclopts#823\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix zsh completion recursion when \u003ccode\u003eprog_name\u003c/code\u003e matches a builtin helper by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/825\"\u003eBrianPugh/cyclopts#825\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd ubuntu-24.04-arm to the CI testing matrix by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/822\"\u003eBrianPugh/cyclopts#822\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add missing typer Option imports in flag negation examples by \u003ca href=\"https://github.com/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/824\"\u003eBrianPugh/cyclopts#824\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/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/824\"\u003eBrianPugh/cyclopts#824\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.16.0...v4.16.1\"\u003ehttps://github.com/BrianPugh/cyclopts/compare/v4.16.0...v4.16.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.16.0\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReturn-value objects can now declare their own exit code by defining a \u003ccode\u003e__cyclopts_returncode__\u003c/code\u003e method, which is honored by all built-in \u003ccode\u003eresult_action\u003c/code\u003e handlers. Custom \u003ccode\u003eresult_action\u003c/code\u003e callables can opt in via the new \u003ccode\u003ecyclopts.resolve_returncode\u003c/code\u003e helper. By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/818\"\u003eBrianPugh/cyclopts#818\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0692/\"\u003ePEP 692\u003c/a\u003e support: when \u003ccode\u003e**kwargs\u003c/code\u003e is annotated as \u003ccode\u003eUnpack[SomeTypedDict]\u003c/code\u003e, the TypedDict's fields are promoted to top-level CLI options instead of the generic \u003ccode\u003e--[KEYWORD]\u003c/code\u003e catch-all. Per-field \u003ccode\u003eRequired\u003c/code\u003e / \u003ccode\u003eNotRequired\u003c/code\u003e markers are respected independently of the parent kwargs argument. By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/819\"\u003eBrianPugh/cyclopts#819\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCycloptsError.msg\u003c/code\u003e now accepts a \u003ccode\u003erich.Text\u003c/code\u003e instance. Cyclopts' error-message style palette is exposed as \u003ccode\u003ecyclopts.exceptions.STYLE_OFFENDING_VALUE\u003c/code\u003e, \u003ccode\u003eSTYLE_NAME\u003c/code\u003e, \u003ccode\u003eSTYLE_VALID_CHOICE\u003c/code\u003e, \u003ccode\u003eSTYLE_SUGGESTION\u003c/code\u003e, and \u003ccode\u003eSTYLE_SOURCE\u003c/code\u003e . By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/814\"\u003eBrianPugh/cyclopts#814\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.0\"\u003ehttps://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.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/BrianPugh/cyclopts/commit/ea77abc99ef67dc4da21548d3b2ff2150c265afe\"\u003e\u003ccode\u003eea77abc\u003c/code\u003e\u003c/a\u003e fix zsh completion recursion when prog_name matches a builtin helper\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/e297647b12b71155d01f87e8e1d5e008c90962b6\"\u003e\u003ccode\u003ee297647\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/824\"\u003e#824\u003c/a\u003e from SAY-5/docs-fix-typer-option-import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/923a5648ed221c1f7683810851c4ade348149fa4\"\u003e\u003ccode\u003e923a564\u003c/code\u003e\u003c/a\u003e docs: add missing typer Option imports in flag negation examples\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/ddb9cc2ec53ad103a4525e399afa92188ac81ae3\"\u003e\u003ccode\u003eddb9cc2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/823\"\u003e#823\u003c/a\u003e from BrianPugh/fish-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/bd56e32b839d9b90e060b1fd88105985194887db\"\u003e\u003ccode\u003ebd56e32\u003c/code\u003e\u003c/a\u003e fix fish completion for positional args and run fish tests in ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/fba7293a546d7569f8cb74a85badc0a8f9401691\"\u003e\u003ccode\u003efba7293\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/822\"\u003e#822\u003c/a\u003e from BrianPugh/arm-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/17e22f16883a7132b9d9bc12dc18c16b726d8a73\"\u003e\u003ccode\u003e17e22f1\u003c/code\u003e\u003c/a\u003e skip global zsh rcs in completion tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/4cc78acd473f09d1e6267ed92f3ca24358c4b8cd\"\u003e\u003ccode\u003e4cc78ac\u003c/code\u003e\u003c/a\u003e install zsh in linux ci runs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/5c87c2752b494e9486f422d48473d206cd6ab66e\"\u003e\u003ccode\u003e5c87c27\u003c/code\u003e\u003c/a\u003e add ubuntu-24.04-arm to the CI testing matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/be2b4295f4632315ae1e49c8f3799bc71086a751\"\u003e\u003ccode\u003ebe2b429\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/819\"\u003e#819\u003c/a\u003e from BrianPugh/pep-692\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\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.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.41.1 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\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/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.41.1...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.47.0 to 0.49.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2971\"\u003eKludex/uvicorn#2971\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\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.49.0 (June 3, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003ehttptools\u003c/code\u003e minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (reverses the 0.48.0 behavior of ignoring them) (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3ef2e3e08e3d9ad9572800f8bc54f3eaed9eab0a\"\u003e\u003ccode\u003e3ef2e3e\u003c/code\u003e\u003c/a\u003e Version 0.49.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2973\"\u003e#2973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/eeb64b1d1c95a14096ed3313377c74b485f558fc\"\u003e\u003ccode\u003eeeb64b1\u003c/code\u003e\u003c/a\u003e Consume duplicate forwarding headers in ProxyHeadersMiddleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/630f4aca14e79183617c71be714030842a1041c5\"\u003e\u003ccode\u003e630f4ac\u003c/code\u003e\u003c/a\u003e Make the watchfiles reload tests deterministic (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2972\"\u003e#2972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9154922e3730f7aba68ecc3ecbf536680ee8fd1c\"\u003e\u003ccode\u003e9154922\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group across 1 directory with 6 updates ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/739727a1d80e468d1e47e98bbd824ee9e3c9554b\"\u003e\u003ccode\u003e739727a\u003c/code\u003e\u003c/a\u003e Migrate docs deploy from Cloudflare Pages to Workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2967\"\u003e#2967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/be4a240488d3fb678a11b8e8f83505266f5f1de7\"\u003e\u003ccode\u003ebe4a240\u003c/code\u003e\u003c/a\u003e Gate docs preview deploy on Cloudflare token presence (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/c489d7e10dfe653a2bba914feedf2a632a026e6f\"\u003e\u003ccode\u003ec489d7e\u003c/code\u003e\u003c/a\u003e Bump httptools minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9f547bd82ef52bcba206e04170b359bd6daa25b3\"\u003e\u003ccode\u003e9f547bd\u003c/code\u003e\u003c/a\u003e Skip docs preview deploy for Dependabot PRs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2961\"\u003e#2961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/44446b894e37ca76830d6aa83df4349795400ed4\"\u003e\u003ccode\u003e44446b8\u003c/code\u003e\u003c/a\u003e Migrate documentation from MkDocs Material to Zensical (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2959\"\u003e#2959\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cfd659c4f18b526adce9c255c96707bab20af40c\"\u003e\u003ccode\u003ecfd659c\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions to 10.21.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2958\"\u003e#2958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.49.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydocket` from 0.20.3 to 0.21.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chrisguidry/docket/releases\"\u003epydocket's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.21.1 - Eight misbehavin'\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eredis-py==8.0.0\u003c/code\u003e changed a default timeout that broke long-lived blocking connections (like pubsub and streams).  With this release, that's fixed and we support (and have tests for) redis-py 5.x, 6.x, 7.x, and 8.x\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport redis-py 8, and make CI actually exercise it by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/427\"\u003echrisguidry/docket#427\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.21.0...0.21.1\"\u003ehttps://github.com/chrisguidry/docket/compare/0.21.0...0.21.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.21.0 - Don't Call Me\u003c/h2\u003e\n\u003cp\u003eThis is a performance-tuning release focused on reducing how chatty Docket is with Redis, and folding several separate operations into single pipelines and scripts.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump idna from 3.11 to 3.15 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/chrisguidry/docket/pull/418\"\u003echrisguidry/docket#418\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pymdown-extensions from 10.21.2 to 10.21.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/chrisguidry/docket/pull/417\"\u003echrisguidry/docket#417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory 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/chrisguidry/docket/pull/416\"\u003echrisguidry/docket#416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache Lua scripts at module scope to skip per-call SHA work by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/419\"\u003echrisguidry/docket#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFold state PUBLISH into the per-task Lua scripts by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/420\"\u003echrisguidry/docket#420\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFold the rest of the task-completion path into _terminal by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/421\"\u003echrisguidry/docket#421\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePost-release review fixes for \u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/422\"\u003echrisguidry/docket#422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock in regression coverage for implicit invariants in the recent Lua refactor by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/423\"\u003echrisguidry/docket#423\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.20.3...0.21.0\"\u003ehttps://github.com/chrisguidry/docket/compare/0.20.3...0.21.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/chrisguidry/docket/commit/cfafd7e3d8b4dd20d237b237c2b4ce78dc69ad5b\"\u003e\u003ccode\u003ecfafd7e\u003c/code\u003e\u003c/a\u003e Support redis-py 8, and make CI actually exercise it (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/11ebbcd7731441c0460b00d41bdbaeb5072069bb\"\u003e\u003ccode\u003e11ebbcd\u003c/code\u003e\u003c/a\u003e Lock in regression coverage for implicit invariants in the recent Lua refacto...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/bf1fa2afc122968b6a0845e7b7edc5f112c0a79d\"\u003e\u003ccode\u003ebf1fa2a\u003c/code\u003e\u003c/a\u003e Post-release review fixes for \u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/422\"\u003e#422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/b82ef829c704d4a102b3e2b11fabf69d118e3673\"\u003e\u003ccode\u003eb82ef82\u003c/code\u003e\u003c/a\u003e Fold the rest of the task-completion path into _terminal (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/1cdb6dfffe8791684f3b0abe94751a54aaa8dc63\"\u003e\u003ccode\u003e1cdb6df\u003c/code\u003e\u003c/a\u003e Fold state PUBLISH into the per-task Lua scripts (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/e95be4a45bdf87cd4c67c9c9a5fd5db83d4c8136\"\u003e\u003ccode\u003ee95be4a\u003c/code\u003e\u003c/a\u003e Cache Lua scripts at module scope to skip per-call SHA work (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/718df97071c73b84ce9b6afcd49e51b75fcbe69f\"\u003e\u003ccode\u003e718df97\u003c/code\u003e\u003c/a\u003e Bump the all-dependencies group across 1 directory with 14 updates (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/416\"\u003e#416\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/ea4077df41e2e2451f7767ced4db0aaef1c2d5c2\"\u003e\u003ccode\u003eea4077d\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 10.21.2 to 10.21.3 (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/6d015281dee243fcbc9e359fdd204b0926704b02\"\u003e\u003ccode\u003e6d01528\u003c/code\u003e\u003c/a\u003e Bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.20.3...0.21.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.62b1 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\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/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp` from 1.41.1 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\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/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.41.1...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation` from 0.62b1 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/releases\"\u003eopentelemetry-instrumentation's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopentelemetry-instrumentation-openai-v2 2.4b0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate experimental path from deprecated \u003ccode\u003eLLMInvocation\u003c/code\u003e to \u003ccode\u003eInferenceInvocation\u003c/code\u003e, using \u003ccode\u003ehandler.start_inference()\u003c/code\u003e and \u003ccode\u003einvocation.stop()\u003c/code\u003e/\u003ccode\u003einvocation.fail()\u003c/code\u003e directly (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4502\"\u003e#4502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ecreate_duration_histogram\u003c/code\u003e and \u003ccode\u003ecreate_token_histogram\u003c/code\u003e from \u003ccode\u003eopentelemetry-util-genai\u003c/code\u003e instead of defining bucket boundaries locally (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4501\"\u003e#4501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eOTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT\u003c/code\u003e from \u003ccode\u003eopentelemetry.util.genai.environment_variables\u003c/code\u003e instead of re-defining it locally, making \u003ccode\u003eopentelemetry-util-genai\u003c/code\u003e the single source of truth for this constant. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4455\"\u003e#4455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with wrapt 2.x by using positional arguments in \u003ccode\u003ewrap_function_wrapper()\u003c/code\u003e calls (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4445\"\u003e#4445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eChoiceBuffer\u003c/code\u003e crash on streaming tool-call deltas with \u003ccode\u003earguments=None\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4350\"\u003e#4350\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eStreamWrapper\u003c/code\u003e missing \u003ccode\u003e.headers\u003c/code\u003e and other attributes when using \u003ccode\u003ewith_raw_response\u003c/code\u003e streaming (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4113\"\u003e#4113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd opt-in support for latest experimental semantic conventions (v1.37.0). Set \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e to \u003ccode\u003egen_ai_latest_experimental\u003c/code\u003e to enable. Add dependency on \u003ccode\u003eopentelemetry-util-genai\u003c/code\u003e pypi package. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3715\"\u003e#3715\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd wrappers for OpenAI Responses API streams and response stream managers (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4280\"\u003e#4280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd async wrappers for OpenAI Responses API streams and response stream managers (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4325\"\u003e#4325\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd strongly typed Responses API extractors with validation and content extraction improvements (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4337\"\u003e#4337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd completion hook support. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4315\"\u003e#4315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eresponse_format\u003c/code\u003e handling: map \u003ccode\u003ejson_object\u003c/code\u003e/\u003ccode\u003ejson_schema\u003c/code\u003e to \u003ccode\u003ejson\u003c/code\u003e output type. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4315\"\u003e#4315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip attribute values with \u003ccode\u003eopenai.Omit\u003c/code\u003e value. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4315\"\u003e#4315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefault empty string for \u003ccode\u003egen_ai.request.model\u003c/code\u003e attribute on missing model. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4494\"\u003e#4494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopentelemetry-instrumentation-openai-v2 2.3b0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eAttributeError\u003c/code\u003e when handling \u003ccode\u003eLegacyAPIResponse\u003c/code\u003e (from \u003ccode\u003ewith_raw_response\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4017\"\u003e#4017\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for chat completions choice count and stop sequences span attributes (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4028\"\u003e#4028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash with streaming \u003ccode\u003ewith_raw_response\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4033\"\u003e#4033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump to 1.30.0 semconv schema: \u003ccode\u003egen_ai.request.seed\u003c/code\u003e instead of \u003ccode\u003egen_ai.openai.request.seed\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4036\"\u003e#4036\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopentelemetry-instrumentation-openai-v2 2.2b0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix service tier attribute names: use \u003ccode\u003eGEN_AI_OPENAI_REQUEST_SERVICE_TIER\u003c/code\u003e for request attributes and \u003ccode\u003eGEN_AI_OPENAI_RESPONSE_SERVICE_TIER\u003c/code\u003e for response attributes. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/3920\"\u003e#3920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for OpenAI embeddings instrumentation (\u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/beaconchain-horizon/prefect/pull/17","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/beaconchain-horizon%2Fprefect/issues/17","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/17/packages"},{"uuid":"4566799598","node_id":"PR_kwDOCE-DHM7hjPsk","number":2899,"state":"closed","title":"Bump cachetools from 6.2.6 to 7.1.4","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-18T11:02:51.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-01T22:19:59.000Z","updated_at":"2026-06-18T11:02:53.000Z","time_to_close":1428172,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"cachetools","old_version":"6.2.6","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.6 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!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/v6.2.6...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=uv\u0026previous-version=6.2.6\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/safe-global/safe-transaction-service/pull/2899","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/safe-global%2Fsafe-transaction-service/issues/2899","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2899/packages"},{"uuid":"4565417266","node_id":"PR_kwDOSlL6KM7her48","number":12,"state":"closed","title":"deps(py): bump the python-minor group across 1 directory with 40 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-08T05:41:39.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-01T18:28:07.000Z","updated_at":"2026-06-08T05:41:41.000Z","time_to_close":558812,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(py): bump","group_name":"python-minor","update_count":40,"packages":[{"name":"cachetools","old_version":"7.0.5","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"choreographer","old_version":"1.2.1","new_version":"1.3.0","repository_url":"https://github.com/plotly/choreographer"},{"name":"click","old_version":"8.3.2","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"decorator","old_version":"5.2.1","new_version":"5.3.1","repository_url":"https://github.com/micheles/decorator"},{"name":"duckdb","old_version":"1.5.2","new_version":"1.5.3","repository_url":"https://github.com/duckdb/duckdb-python"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.1","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.11","new_version":"3.17","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.12.0","new_version":"9.14.0","repository_url":"https://github.com/ipython/ipython"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"kaleido","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/plotly/kaleido"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"matplotlib-inline","old_version":"0.2.1","new_version":"0.2.2","repository_url":"https://github.com/ipython/matplotlib-inline"},{"name":"mcp","old_version":"1.27.0","new_version":"1.27.2","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"py-lets-be-rational","old_version":"1.0.1","new_version":"1.1.2","repository_url":"https://github.com/vollib/py_lets_be_rational"},{"name":"py-vollib","old_version":"1.0.1","new_version":"1.0.12","repository_url":"https://github.com/vollib/py_vollib"},{"name":"narwhals","old_version":"2.19.0","new_version":"2.22.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"numpy","old_version":"2.4.4","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"orjson","old_version":"3.11.8","new_version":"3.11.9","repository_url":"https://github.com/ijl/orjson"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"plotly","old_version":"6.6.0","new_version":"6.7.0","repository_url":"https://github.com/plotly/plotly.py"},{"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":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-engineio","old_version":"4.13.1","new_version":"4.13.2","repository_url":"https://github.com/miguelgrinberg/python-engineio"},{"name":"python-multipart","old_version":"0.0.26","new_version":"0.0.30","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"python-socketio","old_version":"5.16.1","new_version":"5.16.2","repository_url":"https://github.com/miguelgrinberg/python-socketio"},{"name":"python-telegram-bot","old_version":"22.6","new_version":"22.7","repository_url":"https://github.com/python-telegram-bot/python-telegram-bot"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"tornado","old_version":"6.5.5","new_version":"6.5.6","repository_url":"https://github.com/tornadoweb/tornado"},{"name":"traitlets","old_version":"5.14.3","new_version":"5.15.0","repository_url":"https://github.com/ipython/traitlets"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.44.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.7.0","repository_url":"https://github.com/jquast/wcwidth"},{"name":"wheel","old_version":"0.46.3","new_version":"0.47.0","repository_url":"https://github.com/pypa/wheel"},{"name":"wtforms","old_version":"3.2.1","new_version":"3.2.2","repository_url":"https://github.com/pallets-eco/wtforms"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 40 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.5` | `7.1.4` |\n| [choreographer](https://github.com/plotly/choreographer) | `1.2.1` | `1.3.0` |\n| [click](https://github.com/pallets/click) | `8.3.2` | `8.4.1` |\n| [decorator](https://github.com/micheles/decorator) | `5.2.1` | `5.3.1` |\n| [duckdb](https://github.com/duckdb/duckdb-python) | `1.5.2` | `1.5.3` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.1` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.17` |\n| [ipython](https://github.com/ipython/ipython) | `9.12.0` | `9.14.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [kaleido](https://github.com/plotly/kaleido) | `1.2.0` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [matplotlib-inline](https://github.com/ipython/matplotlib-inline) | `0.2.1` | `0.2.2` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.27.0` | `1.27.2` |\n| [py-lets-be-rational](https://github.com/vollib/py_lets_be_rational) | `1.0.1` | `1.1.2` |\n| [py-vollib](https://github.com/vollib/py_vollib) | `1.0.1` | `1.0.12` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.19.0` | `2.22.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.4` | `2.4.6` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.8` | `3.11.9` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [plotly](https://github.com/plotly/plotly.py) | `6.6.0` | `6.7.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| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.1` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [python-engineio](https://github.com/miguelgrinberg/python-engineio) | `4.13.1` | `4.13.2` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.26` | `0.0.30` |\n| [python-socketio](https://github.com/miguelgrinberg/python-socketio) | `5.16.1` | `5.16.2` |\n| [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) | `22.6` | `22.7` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.50` |\n| [tornado](https://github.com/tornadoweb/tornado) | `6.5.5` | `6.5.6` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14.3` | `5.15.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.44.0` | `0.48.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.7.0` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.47.0` |\n| [wtforms](https://github.com/pallets-eco/wtforms) | `3.2.1` | `3.2.2` |\n\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 `choreographer` from 1.2.1 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/choreographer/blob/main/CHANGELOG.txt\"\u003echoreographer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ev1.3.0\nv1.3.0rc2\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCheck path validity for browser with is_file()\u003c/li\u003e\n\u003cli\u003eAdd option --verify_local in choreo_diagnose and fix local reporting logic\nv1.3.0rc1\u003c/li\u003e\n\u003cli\u003eWe now look for old download path as well as new download path\nv1.3.0rc0\u003c/li\u003e\n\u003cli\u003eChange to process group for better killing of multi-process chrome\u003c/li\u003e\n\u003cli\u003eAdd argument to Session/Target \u003ccode\u003esend_command(..., *, with_perf: bool)\u003c/code\u003e to\nreturn timing information about browser write/read.\u003c/li\u003e\n\u003cli\u003eUpdate default chrome from 135.0.7011.0/1418433 to 144.0.7527.0/1544685\u003c/li\u003e\n\u003cli\u003eFix: New chrome takes longer/doesn't populate targets right away, so add a\nretry loop to populate targets\u003c/li\u003e\n\u003cli\u003eAlter \u003ccode\u003eget_chrome\u003c/code\u003e verbose to print whole JSON\u003c/li\u003e\n\u003cli\u003eChange chrome download path to use XDG cache dir\u003c/li\u003e\n\u003cli\u003eDon't download chrome if we already have that version: add force argument\u003c/li\u003e\n\u003cli\u003eRemove unused system inspection code\u003c/li\u003e\n\u003cli\u003eAdd a set of helper functions to await for tab loading and send javascript\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/choreographer/commit/92147b1ccf024ae647f29ebf43057564011e06c9\"\u003e\u003ccode\u003e92147b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/296\"\u003e#296\u003c/a\u003e from plotly/cam/update-changelog-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/8851fc919bc7dfb27a48541543f1ff195c48eda3\"\u003e\u003ccode\u003e8851fc9\u003c/code\u003e\u003c/a\u003e Updates to release version v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/3128bddf909381a2b4205f0e28c0c3cb8b13498c\"\u003e\u003ccode\u003e3128bdd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/288\"\u003e#288\u003c/a\u003e from plotly/andrew/more_local_logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/a6f478e00fb81ad22db7c7c1d31028fb4ab20311\"\u003e\u003ccode\u003ea6f478e\u003c/code\u003e\u003c/a\u003e Add to changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/953e19ad5dc395a3554cfbaf25599a8a3db6d933\"\u003e\u003ccode\u003e953e19a\u003c/code\u003e\u003c/a\u003e Check browser is file whwen checking path validity\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/d062e355b819b84e57060d4e48fbe2aa6f063259\"\u003e\u003ccode\u003ed062e35\u003c/code\u003e\u003c/a\u003e Change default setting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c0c97fc64a55c773dd7484674996cf55d74249a1\"\u003e\u003ccode\u003ec0c97fc\u003c/code\u003e\u003c/a\u003e Add option to verify local with choreo_diagnose\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/7ade1922269a6999c06f2ff92b34a1770bba6d3e\"\u003e\u003ccode\u003e7ade192\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/286\"\u003e#286\u003c/a\u003e from plotly/andrew/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/edf284c8973dd9dc7f7b2f77a53481fe6f0d2671\"\u003e\u003ccode\u003eedf284c\u003c/code\u003e\u003c/a\u003e Update Roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c1b7abce535feb79748c888ba1130b985c13eb3f\"\u003e\u003ccode\u003ec1b7abc\u003c/code\u003e\u003c/a\u003e Changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/choreographer/compare/v1.2.1...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.2 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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\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\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.3.2...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `decorator` from 5.2.1 to 5.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/micheles/decorator/blob/master/CHANGES.md\"\u003edecorator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.3.1 (2026-05-18)\u003c/h2\u003e\n\u003cp\u003eAdded license SPDX identifier to pyproject.toml (reported by\nChristian Lackas).\u003c/p\u003e\n\u003ch2\u003e5.3.0 (2026-05-17)\u003c/h2\u003e\n\u003cp\u003eAdded official support for Python 3.14 (thanks to Hugo van Kemenade,\nDavid Cain and the GitHub user bersbersbers).\nFixed a bug with \u0026quot;return await\u0026quot; contributed by Kadir Can Ozden.\nMoved decorator.py to a package structure (\u003ccode\u003edecorator/__init__.py\u003c/code\u003e) and\nadded a stub file (\u003ccode\u003edecorator/__init__.pyi\u003c/code\u003e) contributed by Marco Gorelli.\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/micheles/decorator/commit/426e9e35d563ffe356e54bd0f970d153b8f25370\"\u003e\u003ccode\u003e426e9e3\u003c/code\u003e\u003c/a\u003e Bumped the version to 5.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/062ff0e0c33733f2148a5590d118a8570df846d5\"\u003e\u003ccode\u003e062ff0e\u003c/code\u003e\u003c/a\u003e Fixed the dependency on setuptools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/086ff5d95d4dc550117c12647a4427d70bf8833d\"\u003e\u003ccode\u003e086ff5d\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/5807a83ead31f0de5303fa950ddea49d850d7355\"\u003e\u003ccode\u003e5807a83\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/093aced11439251e496b47a9a9369501075e8d1a\"\u003e\u003ccode\u003e093aced\u003c/code\u003e\u003c/a\u003e Updated changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/e9ced7e63ad9502b3e2a3e3db5f5f1ccc16c5fd6\"\u003e\u003ccode\u003ee9ced7e\u003c/code\u003e\u003c/a\u003e Added license SPDX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/b3e82ddc04e8d0c18c51eecb30b4a59aee5aac1d\"\u003e\u003ccode\u003eb3e82dd\u003c/code\u003e\u003c/a\u003e Fixed CHANGES.md [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/f1ce8da8522193421436c368849afe886666b4e5\"\u003e\u003ccode\u003ef1ce8da\u003c/code\u003e\u003c/a\u003e Doc fix [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/c924d7c6aa2e47a0627706c385101ff8d558d091\"\u003e\u003ccode\u003ec924d7c\u003c/code\u003e\u003c/a\u003e Updated supported versions [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/8b83e8cca35f5c773654ce4ae89b4e3f84f430d3\"\u003e\u003ccode\u003e8b83e8c\u003c/code\u003e\u003c/a\u003e Fixed CHANGES [ci skip]\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/micheles/decorator/compare/5.2.1...5.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `duckdb` 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/duckdb/duckdb-python/releases\"\u003educkdb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.3 Bugfix Release\u003c/h2\u003e\n\u003cp\u003eSee the DuckDB core release notes here: \u003ca href=\"https://github.com/duckdb/duckdb/releases/tag/v1.5.3\"\u003ehttps://github.com/duckdb/duckdb/releases/tag/v1.5.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed in DuckDB Python\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExport all symbols by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/445\"\u003educkdb/duckdb-python#445\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix concjunction OR by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/465\"\u003educkdb/duckdb-python#465\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse recursive mutex to deal with GIL \u0026lt;-\u0026gt; internal lock deadlocks by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/462\"\u003educkdb/duckdb-python#462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow self-joining of Polars lazyframes by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/466\"\u003educkdb/duckdb-python#466\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/duckdb/duckdb-python/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/duckdb/duckdb-python/commit/811b135ee5a0449378ab9635e0284b96485d58d6\"\u003e\u003ccode\u003e811b135\u003c/code\u003e\u003c/a\u003e DuckDB submodule pinned at v1.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/289bfbdc2914894ccbb41028a84abef34448126e\"\u003e\u003ccode\u003e289bfbd\u003c/code\u003e\u003c/a\u003e Bump submodule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/f87d6d938fca2d7b1ae713396e77c86622d17e79\"\u003e\u003ccode\u003ef87d6d9\u003c/code\u003e\u003c/a\u003e Allow self-joining of Polars lazyframes (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/466\"\u003e#466\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/c88229d86bf8e5ff266abc06cc620dc13d9d3529\"\u003e\u003ccode\u003ec88229d\u003c/code\u003e\u003c/a\u003e Allow self-joining of Polars lazyframes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/559f6af94b5c10e863b5e09b318c5c9f6d6c6dda\"\u003e\u003ccode\u003e559f6af\u003c/code\u003e\u003c/a\u003e Only disable unity builds for editable installs on OSX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/97df04987ffd69a0c5a94b4e8802b78c0302023e\"\u003e\u003ccode\u003e97df049\u003c/code\u003e\u003c/a\u003e fix .clangd\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/fd8889e3024da05d7afe90f4e20d6b9bd2b3e9c0\"\u003e\u003ccode\u003efd8889e\u003c/code\u003e\u003c/a\u003e Use recursive mutex to deal with GIL \u0026lt;-\u0026gt; internal lock deadlocks (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/462\"\u003e#462\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/7b77328d1bbcf1a95726c332a47eb8ca817222c4\"\u003e\u003ccode\u003e7b77328\u003c/code\u003e\u003c/a\u003e [duckdb-labs bot] Bump DuckDB submodule (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/9a866338302f8b7d31acde303cec9e3238cb2874\"\u003e\u003ccode\u003e9a86633\u003c/code\u003e\u003c/a\u003e Fix concjunction OR (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/3d778deea42aab1eccce0693538805b9d6183b44\"\u003e\u003ccode\u003e3d778de\u003c/code\u003e\u003c/a\u003e Fix concjunction OR\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duckdb/duckdb-python/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 `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\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-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.5.1\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.1 (2026-05-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd preliminary support for Python 3.15b1. This has not been\nreviewed by CPython core developers, but all tests pass. Binary\nwheels of this version won't work on earlier Python 3.15 builds and\nmay not work on later 3.15 builds.\u003c/li\u003e\n\u003cli\u003eFix the discrepancy in the way the two \u003ccode\u003egetcurrent\u003c/code\u003e APIs behave\nduring greenlet teardown. One API (the C API used by, e.g.,  gevent) raised a\n\u003ccode\u003eRuntimeError\u003c/code\u003e; the other (the Python \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e API)\nreturned \u003ccode\u003eNone\u003c/code\u003e. This second way is incompatible with greenlet's type\nannotations, so \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e now raises a\n\u003ccode\u003eRuntimeError\u003c/code\u003e as well.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.0 (2026-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the \u003ccode\u003eatexit\u003c/code\u003e callback. This callback caused greenlet APIs\nto become unavailable far too soon during interpreter shutdown. Now\nthey remain available while all \u003ccode\u003eatexit\u003c/code\u003e callbacks run. Sometime\nafter \u003ccode\u003ePy_IsFinalizing\u003c/code\u003e becomes true, they may begin misbehaving.\nBecause the order in which C extensions are finalized is undefined,\nC extensions that are sensitive to this need to check the results of\nthat function before invoking greenlet APIs. As a convenience,\n\u003ccode\u003ePyGreenlet_GetCurrent\u003c/code\u003e sets an exception and returns \u003ccode\u003eNULL\u003c/code\u003e\nwhen this happens (and \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e begins returning\n\u003ccode\u003eNone\u003c/code\u003e); other greenlet C API functions have undefined behaviour.\nMethods invoked directly on pre-existing \u003ccode\u003egreenlet.greenlet\u003c/code\u003e\nobjects will continue to function at least until the greenlet C\nextension has been garbage collected and finalized.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 508 \u0026lt;https://github.com/python-greenlet/greenlet/pull/508\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\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/python-greenlet/greenlet/commit/b5e5fc43a51c27ecffa1b1c7107c91464a6b26e2\"\u003e\u003ccode\u003eb5e5fc4\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c8e177413d34bc36ed56d2c185c232ab0538be90\"\u003e\u003ccode\u003ec8e1774\u003c/code\u003e\u003c/a\u003e Tweak wording in CHANGES about greenlet.getcurrent.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/7fb10c570f37b3eb4c8909c6164fdfac3269ddb6\"\u003e\u003ccode\u003e7fb10c5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/510\"\u003e#510\u003c/a\u003e from python-greenlet/315\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/9718ce5a23ea3360232b78a806a837d6c3d6183d\"\u003e\u003ccode\u003e9718ce5\u003c/code\u003e\u003c/a\u003e Add Py 3.15; make both API versions of getcurrent() consistent in raising Run...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/276e08afc4ddba87e4366390e3eeaecd61ccb3b8\"\u003e\u003ccode\u003e276e08a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/509\"\u003e#509\u003c/a\u003e from python-greenlet/dependabot/github_actions/github...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/32b0ad69828eb69d879c70dbee948e685268901b\"\u003e\u003ccode\u003e32b0ad6\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/173b692dc84288ef41572612ac744754f98eaa90\"\u003e\u003ccode\u003e173b692\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c7acc72000572811d6462ebe01733a974f194990\"\u003e\u003ccode\u003ec7acc72\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/d08f99bf40801c5d57af6e13631c0ba68300ecf7\"\u003e\u003ccode\u003ed08f99b\u003c/code\u003e\u003c/a\u003e CHANGES: Update link from \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/507\"\u003e#507\u003c/a\u003e to more full description in \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/fd3391e33cedc7a17a86059f18dfbec2b3a320bd\"\u003e\u003ccode\u003efd3391e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e from python-greenlet/issue507-remove-atexit\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.5.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.11 to 3.17\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.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\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003ch2\u003e3.13 (2026-04-22)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/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\u003e\u003ca href=\"https://github.com/kjd/idna/commit/354eee9850a7b2962b65ae02010f7ebd9c99b7ed\"\u003e\u003ccode\u003e354eee9\u003c/code\u003e\u003c/a\u003e Apply ruff format to uts46data.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/8c34ffcab603b4a7a727d4e286b1f3342813281d\"\u003e\u003ccode\u003e8c34ffc\u003c/code\u003e\u003c/a\u003e Refactor uts46data into parallel arrays\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1189629e8a319f7c2b4678b5716c180ebd97de03\"\u003e\u003ccode\u003e1189629\u003c/code\u003e\u003c/a\u003e Range-encode joining_types for compact representation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f90b87adc6b6b2a591dfc7fb3f8e47870dc81722\"\u003e\u003ccode\u003ef90b87a\u003c/code\u003e\u003c/a\u003e Generic length limit for functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d6ffd28be164dfbd3ebca8b3396e39d191f4909b\"\u003e\u003ccode\u003ed6ffd28\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/247\"\u003e#247\u003c/a\u003e from kjd/release-3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/6d1a0de52a8b4690f1b2a89829aa85ff1de3635a\"\u003e\u003ccode\u003e6d1a0de\u003c/code\u003e\u003c/a\u003e Release 3.16\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 9.12.0 to 9.14.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/9d1f24b9687279362b66f4e8c8a36ffde895a05d\"\u003e\u003ccode\u003e9d1f24b\u003c/code\u003e\u003c/a\u003e release 9.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d8b9d11f2796300d914a88dc08de35ce93bc5aa0\"\u003e\u003ccode\u003ed8b9d11\u003c/code\u003e\u003c/a\u003e Add IPython 9.14 release notes (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15228\"\u003e#15228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/80cc1b963349ebc472b69f7da505cccebb2e6ad5\"\u003e\u003ccode\u003e80cc1b9\u003c/code\u003e\u003c/a\u003e Apply suggestions from code review\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/99feaadc543d43abc9287734651f4b618305a6bb\"\u003e\u003ccode\u003e99feaad\u003c/code\u003e\u003c/a\u003e Prepare release notes for 9.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d0f27b7c656568b30d26bfcbe4232a6254abd64c\"\u003e\u003ccode\u003ed0f27b7\u003c/code\u003e\u003c/a\u003e directive typo (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15225\"\u003e#15225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/85f520ed0bbfb7a17d91ce18fd9dfefb8c2acfdd\"\u003e\u003ccode\u003e85f520e\u003c/code\u003e\u003c/a\u003e directive typo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4c3e934d97015e18f90c1b91d0b1d7936ae81d77\"\u003e\u003ccode\u003e4c3e934\u003c/code\u003e\u003c/a\u003e Fix docstring formatting for prompt_line_number_format help text (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15224\"\u003e#15224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4f88be10853e080303b51a71ce13a550297368db\"\u003e\u003ccode\u003e4f88be1\u003c/code\u003e\u003c/a\u003e DOC: Fix RST inline literal warning in prompt_line_number_format docstring\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/37211dc6d4ab956a7b2ad851a0c10a359a8f87e1\"\u003e\u003ccode\u003e37211dc\u003c/code\u003e\u003c/a\u003e DOC: Add sphinx_toml to docs/requirements.txt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/433aa8e69e71c6a2caa53621c0a670141c617c5d\"\u003e\u003ccode\u003e433aa8e\u003c/code\u003e\u003c/a\u003e Fix broken 'Edit on GitHub' link for auto-generated API docs (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15218\"\u003e#15218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/9.12.0...9.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jedi` from 0.19.2 to 0.20.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.20.0 (2026-05-02)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.14 support\u003c/li\u003e\n\u003cli\u003eRemoved support for Python 3.8 and 3.9\u003c/li\u003e\n\u003cli\u003eUpgraded Typeshed\u003c/li\u003e\n\u003cli\u003eBetter support for Final/ClassVar\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__new__\u003c/code\u003e is now also recognized as a signature and TypeVar inference\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eSelf\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eTypeAlias\u003c/code\u003e, generics for \u003ccode\u003etype[...]\u003c/code\u003e and \u003ccode\u003etuple[...]\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/davidhalter/jedi/commit/3102215478fe07b965dcd8221c17436d1dd7e8ac\"\u003e\u003ccode\u003e3102215\u003c/code\u003e\u003c/a\u003e Move the type parameter syntax tests so that it works for all versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/1b37f2eb946e825cbc2887c6dd34ee046f0ae68c\"\u003e\u003ccode\u003e1b37f2e\u003c/code\u003e\u003c/a\u003e Prepare for the 0.20.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8e4df5cc0ec511db1af6d358182b1fb7c1e0cbff\"\u003e\u003ccode\u003e8e4df5c\u003c/code\u003e\u003c/a\u003e Make sure the new generic syntax does not fail with latest parso\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4c9dbcca0329454b638bfa32e2825bedcfdf0eac\"\u003e\u003ccode\u003e4c9dbcc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2098\"\u003e#2098\u003c/a\u003e from davidhalter/updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/fedb1a5eb0d74446f6d431db2920ab5f1e1d5b18\"\u003e\u003ccode\u003efedb1a5\u003c/code\u003e\u003c/a\u003e Fix 3.10 tests in one more case\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/87e782f9c82de7297e243a770ac8888570bffa8e\"\u003e\u003ccode\u003e87e782f\u003c/code\u003e\u003c/a\u003e Fix flake8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/cd52d982e10ac54f0ebef06e0bd414f79589998a\"\u003e\u003ccode\u003ecd52d98\u003c/code\u003e\u003c/a\u003e Fixes to get the tests passing for 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/d0b11806d4d1def377234bc2dc512992c997a977\"\u003e\u003ccode\u003ed0b1180\u003c/code\u003e\u003c/a\u003e Finally make tests work for 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8520a9958b489bd8d30cf20b4d2798f7289aab45\"\u003e\u003ccode\u003e8520a99\u003c/code\u003e\u003c/a\u003e Implement support for TypeVar inference for \u003cstrong\u003enew\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/55e5f0cb92dd92d5bdc80ecfc38664a1afd921d1\"\u003e\u003ccode\u003e55e5f0c\u003c/code\u003e\u003c/a\u003e Implement new-style unions with TypeVars\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.2...v0.20.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `kaleido` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/kaleido/releases\"\u003ekaleido's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow for request headers to be added to Choreographer calls [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/446\"\u003e#446\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUpdate Choreographer to v1.3.0 [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/449\"\u003e#449\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003cli\u003eFix issue where exporting large figures could cause hang [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/442\"\u003e#442\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/EliasTalcott\"\u003e\u003ccode\u003e@​EliasTalcott\u003c/code\u003e\u003c/a\u003e for the contribution!\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/Kaleido/blob/master/CHANGELOG.md\"\u003ekaleido's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow for request headers to be added to Choreographer calls [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/446\"\u003e#446\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUpdate Choreographer to v1.3.0 [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/449\"\u003e#449\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003cli\u003eFix issue where exporting large figures could cause hang [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/442\"\u003e#442\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/EliasTalcott\"\u003e\u003ccode\u003e@​EliasTalcott\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.3.0rc0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/Kaleido/commit/b7a00c41895ab71b67e5b89b40f186c3f1cecbed\"\u003e\u003ccode\u003eb7a00c4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/451\"\u003e#451\u003c/a\u003e from plotly/release-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/423a4f1cc6cbc701f9238281d63324508f12a272\"\u003e\u003ccode\u003e423a4f1\u003c/code\u003e\u003c/a\u003e Update setuptools config to find required subpackages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/28131a743143cc5d134c6e962b603ff3a5ed6253\"\u003e\u003ccode\u003e28131a7\u003c/code\u003e\u003c/a\u003e Updates for release v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/f72dc86fa75afbca8756fcd9c9b5af550f038d75\"\u003e\u003ccode\u003ef72dc86\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/366\"\u003e#366\u003c/a\u003e from tschm/patch-3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/0c5e89030709bc873806c08542ae66afea304f71\"\u003e\u003ccode\u003e0c5e890\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/450\"\u003e#450\u003c/a\u003e from plotly/cam/js-dependency-updates-may-2026\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/4e95de54ad7874e254665444070cf613104749f5\"\u003e\u003ccode\u003e4e95de5\u003c/code\u003e\u003c/a\u003e Bump pygments from 2.19.2 to 2.20.0 in /src/py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/90ddc9d7e83d4b27cc11a44a9ca15c5d2c6c5688\"\u003e\u003ccode\u003e90ddc9d\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.2.3 to 2.6.3 in /src/py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/f9b850eb38d7d9bb3f24258012d776f03ad355a0\"\u003e\u003ccode\u003ef9b850e\u003c/code\u003e\u003c/a\u003e chore: Update JS dependencies for security fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/0978e65f23fbba486d005df1508e008a080d20e4\"\u003e\u003ccode\u003e0978e65\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/432\"\u003e#432\u003c/a\u003e from plotly/dependabot/npm_and_yarn/src/js/minimatch-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/b639582c0416f48a682ad01d157af22881d94f75\"\u003e\u003ccode\u003eb639582\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/429\"\u003e#429\u003c/a\u003e from plotly/dependabot/npm_and_yarn/src/js/qs-6.14.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/kaleido/compare/v1.2.0...v1.3.0\"\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 `matplotlib-inline` from 0.2.1 to 0.2.2\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/e6e197523ecfabfff1d976e5b6958c3ede948ccb\"\u003e\u003ccode\u003ee6e1975\u003c/code\u003e\u003c/a\u003e release 0.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/0aac2e223483ffbfb5a6076d8c2ca83545cca440\"\u003e\u003ccode\u003e0aac2e2\u003c/code\u003e\u003c/a\u003e Bump the actions group across 1 directory with 2 updates (\u003ca href=\"https://redirect.github.com/ipython/matplotlib-inline/issues/65\"\u003e#65\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/6eb2bd89dc8d4d6678478c6b2ec15be7b20d3374\"\u003e\u003ccode\u003e6eb2bd8\u003c/code\u003e\u003c/a\u003e Bump the actions group across 1 directory with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/631d7dd26be1287f64c5bd4bbb84888903e419b0\"\u003e\u003ccode\u003e631d7dd\u003c/code\u003e\u003c/a\u003e Zizmor hardening (\u003ca href=\"https://redirect.github.com/ipython/matplotlib-inline/issues/66\"\u003e#66\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/8d45c8fc427d39750751bdaa0ffe5abc8e30cd50\"\u003e\u003ccode\u003e8d45c8f\u003c/code\u003e\u003c/a\u003e Zizmor hardening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/f830b37c728146dca4f947de6cbdb420ee9c69fb\"\u003e\u003ccode\u003ef830b37\u003c/code\u003e\u003c/a\u003e Specify BSD license and add license files (\u003ca href=\"https://redirect.github.com/ipython/matplotlib-inline/issues/62\"\u003e#62\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/e3b8bb10d275d5caa97d8d1b584d48797e494de4\"\u003e\u003ccode\u003ee3b8bb1\u003c/code\u003e\u003c/a\u003e Deprecate Python 3.9 in CI pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/c783ae72ed581f24fa136f34e6df4f6e99c3f785\"\u003e\u003ccode\u003ec783ae7\u003c/code\u003e\u003c/a\u003e Deprecate Python 3.9 in CI pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/8ac056c5730a6adbc9dd5e049b85163ba6a09a28\"\u003e\u003ccode\u003e8ac056c\u003c/code\u003e\u003c/a\u003e Update workflow to include matplotlib for tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/0cc8a2e91306c94e36f0a9cd8e31a38299b1c126\"\u003e\u003ccode\u003e0cc8a2e\u003c/code\u003e\u003c/a\u003e Use valid SPDX ID\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/matplotlib-inline/compare/0.2.1...0.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mcp` from 1.27.0 to 1.27.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/modelcontextprotocol/python-sdk/releases\"\u003emcp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.27.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[v1.x] ci: deploy docs to py.sdk.modelcontextprotocol.io via Pages artifact by \u003ca href=\"https://github.com/maxisbey\"\u003e\u003ccode\u003e@​maxisbey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/modelcontextprotocol/python-sdk/pull/2635\"\u003emodelcontextprotocol/python-sdk#2635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[v1.x] Add subject and claims to AccessToken by \u003ca href=\"https://github.com/maxisbey\"\u003e\u003ccode\u003e@​maxisbey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/modelcontextprotocol/python-sdk/pull/2690\"\u003emodelcontextprotocol/python-sdk#2690\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[v1.x] Bind transport sessions to the authenticated principal by \u003ca href=\"https://github.com/maxisbey\"\u003e\u003ccode\u003e@​maxisbey\u003c/code\u003e\u003c/a\u003e in \u003ca h...\n\n_Description has been truncated_","html_url":"https://github.com/joshuwajosh/ForexMindfortemprory/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshuwajosh%2FForexMindfortemprory/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"},{"uuid":"4559655873","node_id":"PR_kwDOK7Bgbc7hL-cF","number":374,"state":"closed","title":"Bump the pip group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-15T00:34:45.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-01T01:15:42.000Z","updated_at":"2026-06-15T00:34:46.000Z","time_to_close":1207143,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip","update_count":20,"packages":[{"name":"black","old_version":"26.3.1","new_version":"26.5.1","repository_url":"https://github.com/psf/black"},{"name":"cachetools","old_version":"7.1.1","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.5.20","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"fastapi-cloud-cli","old_version":"0.17.1","new_version":"0.18.0","repository_url":"https://github.com/fastapilabs/fastapi-cloud-cli"},{"name":"httptools","old_version":"0.7.1","new_version":"0.8.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.13","new_version":"3.17","repository_url":"https://github.com/kjd/idna"},{"name":"pydantic-settings","old_version":"2.14.0","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-ldap","old_version":"3.4.5","new_version":"3.4.7","repository_url":"https://github.com/python-ldap/python-ldap"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.30","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"rich-toolkit","old_version":"0.19.7","new_version":"0.19.10"},{"name":"sentry-sdk","old_version":"2.59.0","new_version":"2.61.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"starlette","old_version":"1.0.0","new_version":"1.2.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"typer","old_version":"0.25.1","new_version":"0.26.4","repository_url":"https://github.com/fastapi/typer"},{"name":"uvicorn","old_version":"0.46.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"watchfiles","old_version":"1.1.1","new_version":"1.2.0","repository_url":"https://github.com/samuelcolvin/watchfiles"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [black](https://github.com/psf/black) | `26.3.1` | `26.5.1` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.1` | `7.1.4` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.5.20` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [fastapi-cloud-cli](https://github.com/fastapilabs/fastapi-cloud-cli) | `0.17.1` | `0.18.0` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.7.1` | `0.8.0` |\n| [idna](https://github.com/kjd/idna) | `3.13` | `3.17` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.0` | `2.14.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [python-ldap](https://github.com/python-ldap/python-ldap) | `3.4.5` | `3.4.7` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.30` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| rich-toolkit | `0.19.7` | `0.19.10` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.59.0` | `2.61.0` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.0` | `1.2.1` |\n| [typer](https://github.com/fastapi/typer) | `0.25.1` | `0.26.4` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.46.0` | `0.48.0` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.1.1` | `1.2.0` |\n\n\nUpdates `black` from 26.3.1 to 26.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/black/releases\"\u003eblack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.5.1\u003c/h2\u003e\n\u003ch3\u003eStable style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix unstable formatting of annotated assignments whose subscript annotation contains\nan inline comment (e.g. \u003ccode\u003ex: list[  # pyright: ignore[...]\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/psf/black/issues/5130\"\u003e#5130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve inline comments (including \u003ccode\u003e# type: ignore\u003c/code\u003e) immediately before a\n\u003ccode\u003e# fmt: skip\u003c/code\u003e line, avoiding AST equivalence failures (\u003ca href=\"https://redirect.github.com/psf/black/issues/5139\"\u003e#5139\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect the version in the published executables (\u003ca href=\"https://redirect.github.com/psf/black/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Neovim integration guide covering conform.nvim, ALE, and simple command approaches\n(\u003ca href=\"https://redirect.github.com/psf/black/issues/5124\"\u003e#5124\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e26.5.0\u003c/h2\u003e\n\u003ch3\u003eHighlights\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),\nboth new syntactic features in Python 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5048\"\u003e#5048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so\nperformance may be slower than on existing Python versions. Wheels will be provided\nonce Python 3.15 is later in its release cycle. (\u003ca href=\"https://redirect.github.com/psf/black/issues/5127\"\u003e#5127\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eStable style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e# fmt: skip\u003c/code\u003e being ignored in nested \u003ccode\u003eif\u003c/code\u003e expressions with parenthesized \u003ccode\u003ein\u003c/code\u003e\nclauses (\u003ca href=\"https://redirect.github.com/psf/black/issues/4903\"\u003e#4903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd syntactic support for Python 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5048\"\u003e#5048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash when an f-string follows a \u003ccode\u003e# fmt: off\u003c/code\u003e comment inside brackets (\u003ca href=\"https://redirect.github.com/psf/black/issues/5097\"\u003e#5097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve multiline compound statement headers when \u003ccode\u003e# fmt: skip\u003c/code\u003e is placed on the\ncolon line (\u003ca href=\"https://redirect.github.com/psf/black/issues/5117\"\u003e#5117\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove heuristics around whether blank lines should appear before, within and after\ngroups of same-name decorated functions (such as \u003ccode\u003e@overload\u003c/code\u003e groups) in \u003ccode\u003e.pyi\u003c/code\u003e stub\nfiles (\u003ca href=\"https://redirect.github.com/psf/black/issues/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix blank lines being removed between a function and a decorated class in \u003ccode\u003e.pyi\u003c/code\u003e stub\nfiles (\u003ca href=\"https://redirect.github.com/psf/black/issues/5092\"\u003e#5092\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent string merger from creating unsplittable long lines when a pragma comment\n(e.g. \u003ccode\u003e# type: ignore\u003c/code\u003e) follows the closing bracket (\u003ca href=\"https://redirect.github.com/psf/black/issues/5096\"\u003e#5096\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRun CI on 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5127\"\u003e#5127\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOutput\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/psf/black/blob/main/CHANGES.md\"\u003eblack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 26.5.1\u003c/h2\u003e\n\u003ch3\u003eStable style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix unstable formatting of annotated assignments whose subscript annotation contains\nan inline comment (e.g. \u003ccode\u003ex: list[  # pyright: ignore[...]\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/psf/black/issues/5130\"\u003e#5130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve inline comments (including \u003ccode\u003e# type: ignore\u003c/code\u003e) immediately before a\n\u003ccode\u003e# fmt: skip\u003c/code\u003e line, avoiding AST equivalence failures (\u003ca href=\"https://redirect.github.com/psf/black/issues/5139\"\u003e#5139\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect the version in the published executables (\u003ca href=\"https://redirect.github.com/psf/black/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Neovim integration guide covering conform.nvim, ALE, and simple command approaches\n(\u003ca href=\"https://redirect.github.com/psf/black/issues/5124\"\u003e#5124\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 26.5.0\u003c/h2\u003e\n\u003ch3\u003eHighlights\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),\nboth new syntactic features in Python 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5048\"\u003e#5048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so\nperformance may be slower than on existing Python versions. Wheels will be provided\nonce Python 3.15 is later in its release cycle. (\u003ca href=\"https://redirect.github.com/psf/black/issues/5127\"\u003e#5127\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eStable style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e# fmt: skip\u003c/code\u003e being ignored in nested \u003ccode\u003eif\u003c/code\u003e expressions with parenthesized \u003ccode\u003ein\u003c/code\u003e\nclauses (\u003ca href=\"https://redirect.github.com/psf/black/issues/4903\"\u003e#4903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd syntactic support for Python 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5048\"\u003e#5048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash when an f-string follows a \u003ccode\u003e# fmt: off\u003c/code\u003e comment inside brackets (\u003ca href=\"https://redirect.github.com/psf/black/issues/5097\"\u003e#5097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve multiline compound statement headers when \u003ccode\u003e# fmt: skip\u003c/code\u003e is placed on the\ncolon line (\u003ca href=\"https://redirect.github.com/psf/black/issues/5117\"\u003e#5117\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove heuristics around whether blank lines should appear before, within and after\ngroups of same-name decorated functions (such as \u003ccode\u003e@overload\u003c/code\u003e groups) in \u003ccode\u003e.pyi\u003c/code\u003e stub\nfiles (\u003ca href=\"https://redirect.github.com/psf/black/issues/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix blank lines being removed between a function and a decorated class in \u003ccode\u003e.pyi\u003c/code\u003e stub\nfiles (\u003ca href=\"https://redirect.github.com/psf/black/issues/5092\"\u003e#5092\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent string merger from creating unsplittable long lines when a pragma comment\n(e.g. \u003ccode\u003e# type: ignore\u003c/code\u003e) follows the closing bracket (\u003ca href=\"https://redirect.github.com/psf/black/issues/5096\"\u003e#5096\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRun CI on 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5127\"\u003e#5127\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/87928e6d6761a4a6d22250e1fee5601b3998086e\"\u003e\u003ccode\u003e87928e6\u003c/code\u003e\u003c/a\u003e Prepare release 26.5.1 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5140\"\u003e#5140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/c970a49702488739add6c728122deb3a99900803\"\u003e\u003ccode\u003ec970a49\u003c/code\u003e\u003c/a\u003e Preserve comments before fmt: skip lines (\u003ca href=\"https://redirect.github.com/psf/black/issues/5139\"\u003e#5139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/5809338fd5f92d50e80c2ad312292ae6d428a480\"\u003e\u003ccode\u003e5809338\u003c/code\u003e\u003c/a\u003e Preserve inline comments inside annotation subscripts (\u003ca href=\"https://redirect.github.com/psf/black/issues/5130\"\u003e#5130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/61361b71995f6ea44ce01915bacd3ecc50642507\"\u003e\u003ccode\u003e61361b7\u003c/code\u003e\u003c/a\u003e docs: add Neovim integration guide and fix http link (\u003ca href=\"https://redirect.github.com/psf/black/issues/5124\"\u003e#5124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/ebe6018e3254629788376e619207719fbe34a849\"\u003e\u003ccode\u003eebe6018\u003c/code\u003e\u003c/a\u003e CI Hotfixes (\u003ca href=\"https://redirect.github.com/psf/black/issues/5136\"\u003e#5136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/9cbd95f80e97c1ab4d690d1d41b81579a13bf75c\"\u003e\u003ccode\u003e9cbd95f\u003c/code\u003e\u003c/a\u003e Fix publish binaries again on Windows (\u003ca href=\"https://redirect.github.com/psf/black/issues/5134\"\u003e#5134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/3dc8e6c41911bdaedb4bac8d633979c34a112b78\"\u003e\u003ccode\u003e3dc8e6c\u003c/code\u003e\u003c/a\u003e Add new changelog (\u003ca href=\"https://redirect.github.com/psf/black/issues/5132\"\u003e#5132\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/6d0fff0d5a965b9d0d3dbd7c5738d835fd574130\"\u003e\u003ccode\u003e6d0fff0\u003c/code\u003e\u003c/a\u003e Fix publish binaries workflow (\u003ca href=\"https://redirect.github.com/psf/black/issues/5133\"\u003e#5133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/d2490e24dad33b8f68c77602ee29160de0fea24b\"\u003e\u003ccode\u003ed2490e2\u003c/code\u003e\u003c/a\u003e Prepare release 26.5.0 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5131\"\u003e#5131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/2b13ea76fa69d4923381df65deb1a5c896ca27ad\"\u003e\u003ccode\u003e2b13ea7\u003c/code\u003e\u003c/a\u003e Preserve multiline headers with fmt skip (\u003ca href=\"https://redirect.github.com/psf/black/issues/5117\"\u003e#5117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/black/compare/26.3.1...26.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.1.1 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\u003c/blockquote\u003e\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.1.1...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.4.22 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\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.05.20\"\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.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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\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\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.3.3...8.4.1\"\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.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi-cloud-cli` from 0.17.1 to 0.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/releases\"\u003efastapi-cloud-cli's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.18.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show Top-3 files larger than threshold on \u003ccode\u003edeploy\u003c/code\u003e command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/190\"\u003e#190\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✨ Show if there's a new fastapi-cloud-cli version available. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/201\"\u003e#201\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Rename \u003ccode\u003eapp_slug\u003c/code\u003e parameter of \u003ccode\u003e_get_app\u003c/code\u003e to \u003ccode\u003eapp_id\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/192\"\u003e#192\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♻️ Improve message around application directory. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/191\"\u003e#191\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/197\"\u003e#197\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/194\"\u003e#194\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 fastar from 0.10.0 to 0.11.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/188\"\u003e#188\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/183\"\u003e#183\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 \u003ccode\u003ety\u003c/code\u003e from 0.0.21 to 0.0.35 and error on warnings. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/195\"\u003e#195\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/labeler from 6.0.1 to 6.1.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/193\"\u003e#193\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/blob/main/release-notes.md\"\u003efastapi-cloud-cli's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.18.0 (2026-05-22)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show Top-3 files larger than threshold on \u003ccode\u003edeploy\u003c/code\u003e command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/190\"\u003e#190\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✨ Show if there's a new fastapi-cloud-cli version available. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/201\"\u003e#201\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Rename \u003ccode\u003eapp_slug\u003c/code\u003e parameter of \u003ccode\u003e_get_app\u003c/code\u003e to \u003ccode\u003eapp_id\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/192\"\u003e#192\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♻️ Improve message around application directory. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/191\"\u003e#191\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/197\"\u003e#197\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/194\"\u003e#194\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 fastar from 0.10.0 to 0.11.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/188\"\u003e#188\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/183\"\u003e#183\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 \u003ccode\u003ety\u003c/code\u003e from 0.0.21 to 0.0.35 and error on warnings. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/195\"\u003e#195\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/labeler from 6.0.1 to 6.1.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/193\"\u003e#193\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/26541b275a6aaeadad9a27c8177771f5939c2d3f\"\u003e\u003ccode\u003e26541b2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.18.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/d3423567b862e67df04144054b2e4b69cc497f17\"\u003e\u003ccode\u003ed342356\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/1ca104f73223a98e2764d99d8c3a1bead23dc22a\"\u003e\u003ccode\u003e1ca104f\u003c/code\u003e\u003c/a\u003e 🚸 Show Top-3 files larger than threshold on \u003ccode\u003edeploy\u003c/code\u003e command (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/190\"\u003e#190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/32a17b8854d6a27464f30e43e83ba73d42b41fe0\"\u003e\u003ccode\u003e32a17b8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/18b4a43c6e286277a6a9d510b0458d17afc899d0\"\u003e\u003ccode\u003e18b4a43\u003c/code\u003e\u003c/a\u003e ✨ Show if there's a new fastapi-cloud-cli version available (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/201\"\u003e#201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/ce2110b7b97fb57bc6a547b7972fdce01679fe66\"\u003e\u003ccode\u003ece2110b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/4916f02249b5d703ff7e78cf3c9921b66589b43e\"\u003e\u003ccode\u003e4916f02\u003c/code\u003e\u003c/a\u003e 🔒️ Only allow team members to modify dependencies (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/197\"\u003e#197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/8dae1ac9758bab3d99d0a2b669e551a0ec8a9984\"\u003e\u003ccode\u003e8dae1ac\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/0780b8933ee29ad6cfd7fb7167eaa106cd2d8775\"\u003e\u003ccode\u003e0780b89\u003c/code\u003e\u003c/a\u003e ⬆ Bump urllib3 from 2.6.3 to 2.7.0 (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/194\"\u003e#194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/8790640da9e24e140d14b928016c6c85f7f62bb8\"\u003e\u003ccode\u003e8790640\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/compare/0.17.1...0.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httptools` from 0.7.1 to 0.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/MagicStack/httptools/releases\"\u003ehttptools's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.8.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd http-parser and llhttp licenses into the wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/135\"\u003e#135\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/justeph\"\u003e\u003ccode\u003e@​justeph\u003c/code\u003e\u003c/a\u003e in c398a157)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMark cython module as free-threading compatible (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/139\"\u003e#139\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/kumaraditya303\"\u003e\u003ccode\u003e@​kumaraditya303\u003c/code\u003e\u003c/a\u003e in 28d1db15)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix all typing issues (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/134\"\u003e#134\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in a9bda0ed)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump llhttp to 9.4.1 (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/145\"\u003e#145\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/fantix\"\u003e\u003ccode\u003e@​fantix\u003c/code\u003e\u003c/a\u003e in e3e8d71e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSecurity: fix URL truncation issue (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/144\"\u003e#144\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/fantix\"\u003e\u003ccode\u003e@​fantix\u003c/code\u003e\u003c/a\u003e in a0283f07 for \u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/142\"\u003e#142\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAllow building with latest setuptools (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/138\"\u003e#138\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/OldManYellsAtCloud\"\u003e\u003ccode\u003e@​OldManYellsAtCloud\u003c/code\u003e\u003c/a\u003e in c403ad1a)\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/MagicStack/httptools/commit/cf10ce6f0dae56e61817e67b9bb073dd39d0191a\"\u003e\u003ccode\u003ecf10ce6\u003c/code\u003e\u003c/a\u003e httptools 0.8.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/a0283f07c8a7a3f81e26135283daa25e4baba3af\"\u003e\u003ccode\u003ea0283f0\u003c/code\u003e\u003c/a\u003e security: fix URL truncation issue (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/144\"\u003e#144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/05e6b8e9cf71fed8fa0e4796a2c1a52351b2e182\"\u003e\u003ccode\u003e05e6b8e\u003c/code\u003e\u003c/a\u003e ci: add freethreading 3.14 to the CI matrix (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/146\"\u003e#146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/e3e8d71ee946937209aa965400cc2a8710520215\"\u003e\u003ccode\u003ee3e8d71\u003c/code\u003e\u003c/a\u003e Bump llhttp to 9.4.1 (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/145\"\u003e#145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/a9bda0edb93da51c68cbf6db791c958166b86249\"\u003e\u003ccode\u003ea9bda0e\u003c/code\u003e\u003c/a\u003e Fix all typing issues (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/134\"\u003e#134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/28d1db15eaeaab5bc7d376d2c2035d966b6e1378\"\u003e\u003ccode\u003e28d1db1\u003c/code\u003e\u003c/a\u003e mark cython module as free-threading compatible (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/139\"\u003e#139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/c403ad1ad6cc9345834269a0611b74c6ee4bdcfa\"\u003e\u003ccode\u003ec403ad1\u003c/code\u003e\u003c/a\u003e Allow building with latest setuptools (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/138\"\u003e#138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/c398a1579a30ba12b5aeed2d7163644947514590\"\u003e\u003ccode\u003ec398a15\u003c/code\u003e\u003c/a\u003e Add http-parser and llhttp licenses into the wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/135\"\u003e#135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/4cfdabd31ccfd5ccf9ab8c60992b4348ebcf5a84\"\u003e\u003ccode\u003e4cfdabd\u003c/code\u003e\u003c/a\u003e ci: fix release workflow (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/132\"\u003e#132\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/ef71da977cde416fcbd570393fe0c1e22d26b56f\"\u003e\u003ccode\u003eef71da9\u003c/code\u003e\u003c/a\u003e Post-release version bump\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/MagicStack/httptools/compare/v0.7.1...v0.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.13 to 3.17\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.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\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003c/blockquote\u003e\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/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\u003e\u003ca href=\"https://github.com/kjd/idna/commit/354eee9850a7b2962b65ae02010f7ebd9c99b7ed\"\u003e\u003ccode\u003e354eee9\u003c/code\u003e\u003c/a\u003e Apply ruff format to uts46data.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/8c34ffcab603b4a7a727d4e286b1f3342813281d\"\u003e\u003ccode\u003e8c34ffc\u003c/code\u003e\u003c/a\u003e Refactor uts46data into parallel arrays\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1189629e8a319f7c2b4678b5716c180ebd97de03\"\u003e\u003ccode\u003e1189629\u003c/code\u003e\u003c/a\u003e Range-encode joining_types for compact representation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f90b87adc6b6b2a591dfc7fb3f8e47870dc81722\"\u003e\u003ccode\u003ef90b87a\u003c/code\u003e\u003c/a\u003e Generic length limit for functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d6ffd28be164dfbd3ebca8b3396e39d191f4909b\"\u003e\u003ccode\u003ed6ffd28\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/247\"\u003e#247\u003c/a\u003e from kjd/release-3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/6d1a0de52a8b4690f1b2a89829aa85ff1de3635a\"\u003e\u003ccode\u003e6d1a0de\u003c/code\u003e\u003c/a\u003e Release 3.16\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.13...v3.17\"\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.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/850\"\u003epydantic/pydantic-settings#850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/854\"\u003epydantic/pydantic-settings#854\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/853\"\u003epydantic/pydantic-settings#853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/856\"\u003epydantic/pydantic-settings#856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/858\"\u003epydantic/pydantic-settings#858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.1 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/859\"\u003epydantic/pydantic-settings#859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/e95c30bec8cfaee88ee275138c064aea97a25bdf\"\u003e\u003ccode\u003ee95c30b\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/859\"\u003e#859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/0c8734581b6cf70a995afad603ac456631d00621\"\u003e\u003ccode\u003e0c87345\u003c/code\u003e\u003c/a\u003e Fix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/858\"\u003e#858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/7bd0072795a800065b42210b6dca90fc9b83daf7\"\u003e\u003ccode\u003e7bd0072\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 2 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/856\"\u003e#856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b03e573d017ed48e1c2774a5e0b715db9766c76b\"\u003e\u003ccode\u003eb03e573\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/853\"\u003e#853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/eaa3b434938411ec8a3717ea646614561e713f51\"\u003e\u003ccode\u003eeaa3b43\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 5 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/854\"\u003e#854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9f95615c24c6813c1d7d203576581a79cb6d9e8e\"\u003e\u003ccode\u003e9f95615\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/850\"\u003e#850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\"\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\nUpdates `pyjwt` from 2.12.1 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\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__\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/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\u003eSee full diff in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nU...\n\n_Description has been truncated_","html_url":"https://github.com/ral-facilities/ldap-jwt-auth/pull/374","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ral-facilities%2Fldap-jwt-auth/issues/374","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/374/packages"},{"uuid":"4559549160","node_id":"PR_kwDOPi7ob87hLpJp","number":360,"state":"open","title":"fix(deps): Bump cachetools from 7.1.1 to 7.1.4 in /python","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-01T00:41:41.000Z","updated_at":"2026-06-01T00:41:58.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(deps): Bump","packages":[{"name":"cachetools","old_version":"7.1.1","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":"/python","ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 7.1.1 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\u003c/blockquote\u003e\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.1.1...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=pip\u0026previous-version=7.1.1\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\n🤖 **Auto-generated PR Summary**\n\n## 📝 Changes Summary\n\n### Recent Commits:\n- 669932f fix(deps): Bump cachetools from 7.1.1 to 7.1.4 in /python\n\n## 📁 Files Changed\n\n**Total files changed: 1**\n\n- 📄 **Other**: 1 files\n\n\u003cdetails\u003e\n\u003csummary\u003e📋 Detailed File List\u003c/summary\u003e\n\n#### 🧪 Tests\n\n\n#### 📚 Documentation\n\n\n#### 🔧 Source Code\n\n\n#### ⚙️ Configuration\n\n\n#### 📄 Other Files\n\n- `python/requirements.txt`\n\n\u003c/details\u003e\n\n## 🏷️ Change Type\n\n\n## ✅ Review Checklist\n\n- [ ] Code follows project conventions (Biome linting)\n- [ ] TypeScript types are properly defined\n- [ ] Tests are added/updated for new functionality\n- [ ] Documentation is updated if necessary\n- [ ] All CI checks pass\n- [ ] Breaking changes are documented\n\n---\n\n*🤖 This description was automatically generated from code changes*","html_url":"https://github.com/ksleep98/napoleon-game-4players/pull/360","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksleep98%2Fnapoleon-game-4players/issues/360","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/360/packages"},{"uuid":"4557245100","node_id":"PR_kwDOSs5Jes7hEvQn","number":5,"state":"open","title":"Update cachetools requirement from \u003e=5.3 to \u003e=7.1.4","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-05-31T10:19:53.000Z","updated_at":"2026-05-31T10:19:54.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"cachetools","old_version":"\u003e=5.3","new_version":"\u003e=7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cachetools](https://github.com/tkem/cachetools) to permit the latest version.\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!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/v5.3.0...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/xiaoke949/guard-surface-cn/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaoke949%2Fguard-surface-cn/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"},{"uuid":"4556571063","node_id":"PR_kwDOSXLGM87hCxDL","number":15,"state":"closed","title":"chore(deps): bump the uv-dependencies group across 1 directory with 12 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-07T04:29:37.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-31T04:33:07.000Z","updated_at":"2026-06-07T04:29:39.000Z","time_to_close":604590,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv-dependencies","update_count":12,"packages":[{"name":"apprise","old_version":"1.10.0","new_version":"1.11.0","repository_url":"https://github.com/caronc/apprise"},{"name":"click","old_version":"8.4.0","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"cyclopts","old_version":"4.15.0","new_version":"4.16.1","repository_url":"https://github.com/BrianPugh/cyclopts"},{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydocket","old_version":"0.20.3","new_version":"0.21.1","repository_url":"https://github.com/chrisguidry/docket"},{"name":"uv","old_version":"0.11.15","new_version":"0.11.17","repository_url":"https://github.com/astral-sh/uv"},{"name":"redis","old_version":"7.4.0","new_version":"8.0.0","repository_url":"https://github.com/redis/redis-py"},{"name":"virtualenv","old_version":"21.3.3","new_version":"21.4.1","repository_url":"https://github.com/pypa/virtualenv"},{"name":"ruff","old_version":"0.15.14","new_version":"0.15.15","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-dependencies group with 12 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [apprise](https://github.com/caronc/apprise) | `1.10.0` | `1.11.0` |\n| [click](https://github.com/pallets/click) | `8.4.0` | `8.4.1` |\n| [cyclopts](https://github.com/BrianPugh/cyclopts) | `4.15.0` | `4.16.1` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.3` | `7.1.4` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.48.0` |\n| [pydocket](https://github.com/chrisguidry/docket) | `0.20.3` | `0.21.1` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.15` | `0.11.17` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.0.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.3.3` | `21.4.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.15` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n\n\nUpdates `apprise` from 1.10.0 to 1.11.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/caronc/apprise/releases\"\u003eapprise's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.11.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eA big win for this release is priortization of grouped/tagged content. Basically, this release allows you to tag multiple items and provide a weight to them.   Apprise will attempt to notify the highest priority/weighted services first (of same level), and only if this level fails will it try the next.  Tagging is no longer just a \u003ccode\u003etag\u003c/code\u003e.  It's now \u003ccode\u003eweight:tag\u003c/code\u003e too;  for example \u003ccode\u003e100:friends\u003c/code\u003e  associates the weight of \u003ccode\u003e100\u003c/code\u003e with the tag \u003ccode\u003efriends\u003c/code\u003e.  You can still continue to notify friends with your Apprise calls, but if there are weight categories, then these will be factored into the order.  Highest priority (weighted) tags have a lower integer value (zero being the  higest priority).  Only the next priority will be notified if the first fails.\u003c/p\u003e\n\u003cp\u003eThis releae also allows you to set up a notifiation service to gracefully fail and not have Apprise itself report a failure.  This is useful for situations where you notify several end points and you really don't care if they're unavailable or not.   Apprise wil do it's usual best effort to send the notification, but not treat it as a failure if it can't get through. Use \u003ccode\u003eoptional=yes\u003c/code\u003e on your Apprise URL.\u003c/p\u003e\n\u003cp\u003eThirdly, this release introduces retries! You can now have Apprise attempt to notify your endpoint a second, or a third, (up to 10x) tries before giving up and deeming it unable to send the notification.  Use \u003ccode\u003eretry=X\u003c/code\u003e on your Apprise URL\u003c/p\u003e\n\u003ch3\u003e:mega: New Notification Services:\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded Zoom (Incoming Webhook) Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1596\"\u003ecaronc/apprise#1596\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded WeChat Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1598\"\u003ecaronc/apprise#1598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRingCentral Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/878\"\u003ecaronc/apprise#878\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSession Open Group Server Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1615\"\u003ecaronc/apprise#1615\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded HumHub Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1623\"\u003ecaronc/apprise#1623\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAmazon Chime Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1627\"\u003ecaronc/apprise#1627\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGroupMe Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1629\"\u003ecaronc/apprise#1629\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:lady_beetle:  Bugfixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimproved robustness of windows test cases preventing others from passing in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1609\"\u003ecaronc/apprise#1609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle XMPP SASL SCRAM-PLUS / Channel Binding in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1619\"\u003ecaronc/apprise#1619\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTRACE logging during apprise init cleaned up in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1622\"\u003ecaronc/apprise#1622\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efixed mastodon error: AttributeError -  'list' object has no attribute 'union' in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1631\"\u003ecaronc/apprise#1631\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:bulb: Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eo365:// saveToSentItems configurable - ?savesent=no in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1599\"\u003ecaronc/apprise#1599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdated WhatsApp Buisness Graph API to v21 in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1603\"\u003ecaronc/apprise#1603\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:fire: Built in retries, escalations, priorities, and optional service calls in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1601\"\u003ecaronc/apprise#1601\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSlack Template/Payload support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1604\"\u003ecaronc/apprise#1604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded Slack workflows and trigger support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1605\"\u003ecaronc/apprise#1605\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:rocket: Pushover E2EE Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1612\"\u003ecaronc/apprise#1612\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWKD support added to email plugin in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1614\"\u003ecaronc/apprise#1614\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1618\"\u003ecaronc/apprise#1618\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAmazon SNS/SES Improvements in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1620\"\u003ecaronc/apprise#1620\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNotifico Standalone Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1275\"\u003ecaronc/apprise#1275\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:heart: Life-Cycle Support\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate LoC badge by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1593\"\u003ecaronc/apprise#1593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTwitter/X migration to API v2 in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1607\"\u003ecaronc/apprise#1607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eimprovements to workflow:// based on recent slack:// changes in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1608\"\u003ecaronc/apprise#1608\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:unlock: Added redirect= for allowing url redirection control in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1610\"\u003ecaronc/apprise#1610\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003emqtt:// now depends on paho-mqtt v2.1.0+ in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1613\"\u003ecaronc/apprise#1613\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:skull: Retire msteams:// as it is no longer in service upstream in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1625\"\u003ecaronc/apprise#1625\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstallation\u003c/h2\u003e\n\u003cp\u003eApprise is available \u003ca href=\"https://pypi.org/project/apprise/\"\u003eon PyPI\u003c/a\u003e through \u003cem\u003epip\u003c/em\u003e:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e# Install Apprise v1.11.0 from PyPI\r\npip install apprise==1.11.0\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/caronc/apprise/commit/158c4e1febc3e6093b0f357776b315a90c8a89b5\"\u003e\u003ccode\u003e158c4e1\u003c/code\u003e\u003c/a\u003e bumped version to v1.11.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/21db421ee89b24f1716a4fce74a4404a94bbabe7\"\u003e\u003ccode\u003e21db421\u003c/code\u003e\u003c/a\u003e GroupMe Support Added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1629\"\u003e#1629\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/f1e4ad2fd6659529597b1e07a1e44192faebff54\"\u003e\u003ccode\u003ef1e4ad2\u003c/code\u003e\u003c/a\u003e fixed mastodon error: AttributeError - 'list' object has no attribute 'union'...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/e17fe9dd64dd79e373877cf8ee07595cc50a01cc\"\u003e\u003ccode\u003ee17fe9d\u003c/code\u003e\u003c/a\u003e Amazon Chime Support (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1627\"\u003e#1627\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/dfdac59c9945385c4c75613e57d19558ec995d50\"\u003e\u003ccode\u003edfdac59\u003c/code\u003e\u003c/a\u003e HumHub Support added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1623\"\u003e#1623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/9de0397c30a7a2e58eb57c8da995ec54eada80bc\"\u003e\u003ccode\u003e9de0397\u003c/code\u003e\u003c/a\u003e Notifico Standalone Support Added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/c3e67e61d35a1b0609d176786db1e0b2cc1287da\"\u003e\u003ccode\u003ec3e67e6\u003c/code\u003e\u003c/a\u003e Retired msteams:// - as it is no longer in service upstream (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1625\"\u003e#1625\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/b463f23979455b61c548a550e40a3c75f0191b30\"\u003e\u003ccode\u003eb463f23\u003c/code\u003e\u003c/a\u003e TRACE logging during apprise init cleaned up (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1622\"\u003e#1622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/1e2fdeb72bd8165ad613b162794778ff1c684e67\"\u003e\u003ccode\u003e1e2fdeb\u003c/code\u003e\u003c/a\u003e Amazon SNS/SES Improvements (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1620\"\u003e#1620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/4706d0a4599a5072c8ae17375ee81862bcaac460\"\u003e\u003ccode\u003e4706d0a\u003c/code\u003e\u003c/a\u003e Handle XMPP SASL SCRAM-PLUS / Channel Binding (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1619\"\u003e#1619\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/caronc/apprise/compare/v1.10.0...v1.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.0 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\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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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.4.0...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cyclopts` from 4.15.0 to 4.16.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/BrianPugh/cyclopts/releases\"\u003ecyclopts's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.16.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix fish completion for positional args and run fish tests in ci by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/823\"\u003eBrianPugh/cyclopts#823\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix zsh completion recursion when \u003ccode\u003eprog_name\u003c/code\u003e matches a builtin helper by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/825\"\u003eBrianPugh/cyclopts#825\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd ubuntu-24.04-arm to the CI testing matrix by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/822\"\u003eBrianPugh/cyclopts#822\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add missing typer Option imports in flag negation examples by \u003ca href=\"https://github.com/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/824\"\u003eBrianPugh/cyclopts#824\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/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/824\"\u003eBrianPugh/cyclopts#824\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.16.0...v4.16.1\"\u003ehttps://github.com/BrianPugh/cyclopts/compare/v4.16.0...v4.16.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.16.0\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReturn-value objects can now declare their own exit code by defining a \u003ccode\u003e__cyclopts_returncode__\u003c/code\u003e method, which is honored by all built-in \u003ccode\u003eresult_action\u003c/code\u003e handlers. Custom \u003ccode\u003eresult_action\u003c/code\u003e callables can opt in via the new \u003ccode\u003ecyclopts.resolve_returncode\u003c/code\u003e helper. By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/818\"\u003eBrianPugh/cyclopts#818\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0692/\"\u003ePEP 692\u003c/a\u003e support: when \u003ccode\u003e**kwargs\u003c/code\u003e is annotated as \u003ccode\u003eUnpack[SomeTypedDict]\u003c/code\u003e, the TypedDict's fields are promoted to top-level CLI options instead of the generic \u003ccode\u003e--[KEYWORD]\u003c/code\u003e catch-all. Per-field \u003ccode\u003eRequired\u003c/code\u003e / \u003ccode\u003eNotRequired\u003c/code\u003e markers are respected independently of the parent kwargs argument. By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/819\"\u003eBrianPugh/cyclopts#819\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCycloptsError.msg\u003c/code\u003e now accepts a \u003ccode\u003erich.Text\u003c/code\u003e instance. Cyclopts' error-message style palette is exposed as \u003ccode\u003ecyclopts.exceptions.STYLE_OFFENDING_VALUE\u003c/code\u003e, \u003ccode\u003eSTYLE_NAME\u003c/code\u003e, \u003ccode\u003eSTYLE_VALID_CHOICE\u003c/code\u003e, \u003ccode\u003eSTYLE_SUGGESTION\u003c/code\u003e, and \u003ccode\u003eSTYLE_SOURCE\u003c/code\u003e . By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/814\"\u003eBrianPugh/cyclopts#814\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.0\"\u003ehttps://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.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/BrianPugh/cyclopts/commit/ea77abc99ef67dc4da21548d3b2ff2150c265afe\"\u003e\u003ccode\u003eea77abc\u003c/code\u003e\u003c/a\u003e fix zsh completion recursion when prog_name matches a builtin helper\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/e297647b12b71155d01f87e8e1d5e008c90962b6\"\u003e\u003ccode\u003ee297647\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/824\"\u003e#824\u003c/a\u003e from SAY-5/docs-fix-typer-option-import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/923a5648ed221c1f7683810851c4ade348149fa4\"\u003e\u003ccode\u003e923a564\u003c/code\u003e\u003c/a\u003e docs: add missing typer Option imports in flag negation examples\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/ddb9cc2ec53ad103a4525e399afa92188ac81ae3\"\u003e\u003ccode\u003eddb9cc2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/823\"\u003e#823\u003c/a\u003e from BrianPugh/fish-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/bd56e32b839d9b90e060b1fd88105985194887db\"\u003e\u003ccode\u003ebd56e32\u003c/code\u003e\u003c/a\u003e fix fish completion for positional args and run fish tests in ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/fba7293a546d7569f8cb74a85badc0a8f9401691\"\u003e\u003ccode\u003efba7293\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/822\"\u003e#822\u003c/a\u003e from BrianPugh/arm-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/17e22f16883a7132b9d9bc12dc18c16b726d8a73\"\u003e\u003ccode\u003e17e22f1\u003c/code\u003e\u003c/a\u003e skip global zsh rcs in completion tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/4cc78acd473f09d1e6267ed92f3ca24358c4b8cd\"\u003e\u003ccode\u003e4cc78ac\u003c/code\u003e\u003c/a\u003e install zsh in linux ci runs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/5c87c2752b494e9486f422d48473d206cd6ab66e\"\u003e\u003ccode\u003e5c87c27\u003c/code\u003e\u003c/a\u003e add ubuntu-24.04-arm to the CI testing matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/be2b4295f4632315ae1e49c8f3799bc71086a751\"\u003e\u003ccode\u003ebe2b429\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/819\"\u003e#819\u003c/a\u003e from BrianPugh/pep-692\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\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.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\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.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\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.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydocket` from 0.20.3 to 0.21.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chrisguidry/docket/releases\"\u003epydocket's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.21.1 - Eight misbehavin'\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eredis-py==8.0.0\u003c/code\u003e changed a default timeout that broke long-lived blocking connections (like pubsub and streams).  With this release, that's fixed and we support (and have tests for) redis-py 5.x, 6.x, 7.x, and 8.x\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport redis-py 8, and make CI actually exercise it by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/427\"\u003echrisguidry/docket#427\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.21.0...0.21.1\"\u003ehttps://github.com/chrisguidry/docket/compare/0.21.0...0.21.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.21.0 - Don't Call Me\u003c/h2\u003e\n\u003cp\u003eThis is a performance-tuning release focused on reducing how chatty Docket is with Redis, and folding several separate operations into single pipelines and scripts.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump idna from 3.11 to 3.15 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/chrisguidry/docket/pull/418\"\u003echrisguidry/docket#418\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pymdown-extensions from 10.21.2 to 10.21.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/chrisguidry/docket/pull/417\"\u003echrisguidry/docket#417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory 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/chrisguidry/docket/pull/416\"\u003echrisguidry/docket#416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache Lua scripts at module scope to skip per-call SHA work by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/419\"\u003echrisguidry/docket#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFold state PUBLISH into the per-task Lua scripts by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/420\"\u003echrisguidry/docket#420\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFold the rest of the task-completion path into _terminal by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/421\"\u003echrisguidry/docket#421\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePost-release review fixes for \u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/422\"\u003echrisguidry/docket#422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock in regression coverage for implicit invariants in the recent Lua refactor by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/423\"\u003echrisguidry/docket#423\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.20.3...0.21.0\"\u003ehttps://github.com/chrisguidry/docket/compare/0.20.3...0.21.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/chrisguidry/docket/commit/cfafd7e3d8b4dd20d237b237c2b4ce78dc69ad5b\"\u003e\u003ccode\u003ecfafd7e\u003c/code\u003e\u003c/a\u003e Support redis-py 8, and make CI actually exercise it (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/11ebbcd7731441c0460b00d41bdbaeb5072069bb\"\u003e\u003ccode\u003e11ebbcd\u003c/code\u003e\u003c/a\u003e Lock in regression coverage for implicit invariants in the recent Lua refacto...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/bf1fa2afc122968b6a0845e7b7edc5f112c0a79d\"\u003e\u003ccode\u003ebf1fa2a\u003c/code\u003e\u003c/a\u003e Post-release review fixes for \u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/422\"\u003e#422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/b82ef829c704d4a102b3e2b11fabf69d118e3673\"\u003e\u003ccode\u003eb82ef82\u003c/code\u003e\u003c/a\u003e Fold the rest of the task-completion path into _terminal (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/1cdb6dfffe8791684f3b0abe94751a54aaa8dc63\"\u003e\u003ccode\u003e1cdb6df\u003c/code\u003e\u003c/a\u003e Fold state PUBLISH into the per-task Lua scripts (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/e95be4a45bdf87cd4c67c9c9a5fd5db83d4c8136\"\u003e\u003ccode\u003ee95be4a\u003c/code\u003e\u003c/a\u003e Cache Lua scripts at module scope to skip per-call SHA work (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/718df97071c73b84ce9b6afcd49e51b75fcbe69f\"\u003e\u003ccode\u003e718df97\u003c/code\u003e\u003c/a\u003e Bump the all-dependencies group across 1 directory with 14 updates (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/416\"\u003e#416\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/ea4077df41e2e2451f7767ced4db0aaef1c2d5c2\"\u003e\u003ccode\u003eea4077d\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 10.21.2 to 10.21.3 (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/6d015281dee243fcbc9e359fdd204b0926704b02\"\u003e\u003ccode\u003e6d01528\u003c/code\u003e\u003c/a\u003e Bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.20.3...0.21.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uv` from 0.11.15 to 0.11.17\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/releases\"\u003euv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.17\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-28.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a diagnostic for \u003ccode\u003euv add\u003c/code\u003e with standard library modules (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19572\"\u003e#19572\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose \u003ccode\u003euv workspace\u003c/code\u003e and its \u003ccode\u003elist\u003c/code\u003e subcommand in help output (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19533\"\u003e#19533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove the \u0026quot;403 forbidden\u0026quot; hint to suggest \u003ccode\u003eignore-error-codes\u003c/code\u003e when applicable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19521\"\u003e#19521\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip direct URL lock freshness checks while offline (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19596\"\u003e#19596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eimport-names\u003c/code\u003e and \u003ccode\u003eimport-namespaces\u003c/code\u003e support to \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://peps.python.org/pep-0794/\"\u003ePEP 794\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19380\"\u003e#19380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003e--no-editable-package\u003c/code\u003e flag to various commands (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19584\"\u003e#19584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInfer Python version requests from source trees in \u003ccode\u003euv tool\u003c/code\u003e invocations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19577\"\u003e#19577\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd module owners to \u003ccode\u003euv workspace metadata\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19122\"\u003e#19122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not allow \u003ccode\u003euv venv --clear\u003c/code\u003e to remove non-virtual environments (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19595\"\u003e#19595\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove the performance of large entries in \u003ccode\u003etool.uv.conflicts\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19538\"\u003e#19538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid modifying the parent process' env with \u003ccode\u003e--env-file\u003c/code\u003e in \u003ccode\u003euv run\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19567\"\u003e#19567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix script environment creation for scripts with long filenames (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19539\"\u003e#19539\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix transitive Git archive dependencies in lockfiles (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19589\"\u003e#19589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve Git repository URLs in direct URL metadata (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19590\"\u003e#19590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport redirects in \u003ccode\u003e--check-url\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19594\"\u003e#19594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept case-insensitive HTML tags in \u003ccode\u003e--find-links\u003c/code\u003e parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19537\"\u003e#19537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject duplicate script metadata blocks (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19544\"\u003e#19544\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBan names like \u0026quot;python3\u0026quot; as script entry points (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19535\"\u003e#19535\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19536\"\u003e#19536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate Git LFS artifacts for Git archives (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19592\"\u003e#19592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse a relative path when creating symlinks in cache to improve relocatability (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19033\"\u003e#19033\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix malformed positional anchors in the CLI reference (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19575\"\u003e#19575\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall uv 0.11.17\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/uv/releases/download/0.11.17/uv-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/uv/releases/download/0.11.17/uv-installer.ps1 | iex\u0026quot;\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/blob/main/CHANGELOG.md\"\u003euv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.17\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-28.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a diagnostic for \u003ccode\u003euv add\u003c/code\u003e with standard library modules (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19572\"\u003e#19572\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose \u003ccode\u003euv workspace\u003c/code\u003e and its \u003ccode\u003elist\u003c/code\u003e subcommand in help output (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19533\"\u003e#19533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove the \u0026quot;403 forbidden\u0026quot; hint to suggest \u003ccode\u003eignore-error-codes\u003c/code\u003e when applicable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19521\"\u003e#19521\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip direct URL lock freshness checks while offline (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19596\"\u003e#19596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eimport-names\u003c/code\u003e and \u003ccode\u003eimport-namespaces\u003c/code\u003e support to \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://peps.python.org/pep-0794/\"\u003ePEP 794\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19380\"\u003e#19380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003e--no-editable-package\u003c/code\u003e flag to various commands (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19584\"\u003e#19584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInfer Python version requests from source trees in \u003ccode\u003euv tool\u003c/code\u003e invocations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19577\"\u003e#19577\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd module owners to \u003ccode\u003euv workspace metadata\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19122\"\u003e#19122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not allow \u003ccode\u003euv venv --clear\u003c/code\u003e to remove non-virtual environments (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19595\"\u003e#19595\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove the performance of large entries in \u003ccode\u003etool.uv.conflicts\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19538\"\u003e#19538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid modifying the parent process' env with \u003ccode\u003e--env-file\u003c/code\u003e in \u003ccode\u003euv run\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19567\"\u003e#19567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix script environment creation for scripts with long filenames (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19539\"\u003e#19539\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix transitive Git archive dependencies in lockfiles (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19589\"\u003e#19589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve Git repository URLs in direct URL metadata (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19590\"\u003e#19590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport redirects in \u003ccode\u003e--check-url\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19594\"\u003e#19594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept case-insensitive HTML tags in \u003ccode\u003e--find-links\u003c/code\u003e parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19537\"\u003e#19537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject duplicate script metadata blocks (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19544\"\u003e#19544\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBan names like \u0026quot;python3\u0026quot; as script entry points (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19535\"\u003e#19535\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19536\"\u003e#19536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate Git LFS artifacts for Git archives (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19592\"\u003e#19592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse a relative path when creating symlinks in cache to improve relocatability (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19033\"\u003e#19033\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix malformed positional anchors in the CLI reference (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19575\"\u003e#19575\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\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/uv/commit/a33a629d66753e9722a0040212c004ba66ad04b4\"\u003e\u003ccode\u003ea33a629\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.17 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19599\"\u003e#19599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/7472df8d52db05ea304652133869cccbf6115700\"\u003e\u003ccode\u003e7472df8\u003c/code\u003e\u003c/a\u003e Update conda-incubator/setup-miniconda action to v4 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19233\"\u003e#19233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/484ba3905d0225ef1288ac46bc53ac5018596a58\"\u003e\u003ccode\u003e484ba39\u003c/code\u003e\u003c/a\u003e Do not allow \u003ccode\u003euv venv --clear\u003c/code\u003e to remove non-virtual environments (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19595\"\u003e#19595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/71ae411ae1b53ad2a5bef0d7c0f49cfbbc48ba06\"\u003e\u003ccode\u003e71ae411\u003c/code\u003e\u003c/a\u003e Add a diagnostic for \u003ccode\u003euv add\u003c/code\u003e with standard library modules (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19572\"\u003e#19572\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/28cb0929095aac0ce097d4b97c3935d4e48b7755\"\u003e\u003ccode\u003e28cb092\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e--no-editable-package\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19584\"\u003e#19584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/5a0b932474304d8da37ee169db02c866291dd61f\"\u003e\u003ccode\u003e5a0b932\u003c/code\u003e\u003c/a\u003e Support redirects in \u003ccode\u003e--check-url\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19594\"\u003e#19594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/995b41e850ce0116141f4066e3f93e6d49dc39b9\"\u003e\u003ccode\u003e995b41e\u003c/code\u003e\u003c/a\u003e Encapsulate Git HTTP fetch settings (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19597\"\u003e#19597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/727d2b84f20d6c78e12d4c12f750d973f695e334\"\u003e\u003ccode\u003e727d2b8\u003c/code\u003e\u003c/a\u003e Add module owners to workspace metadata (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19122\"\u003e#19122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4e25ecad0d7c33e8b00dcf84af54ff54fe30e3e7\"\u003e\u003ccode\u003e4e25eca\u003c/code\u003e\u003c/a\u003e Skip direct URL lock freshness checks while offline (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19596\"\u003e#19596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/da5f6a6967b41423fb2a61bf094adff4e403367c\"\u003e\u003ccode\u003eda5f6a6\u003c/code\u003e\u003c/a\u003e Infer Python version requests from source trees in \u003ccode\u003euv tool\u003c/code\u003e invocations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19\"\u003e#19\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/uv/compare/0.11.15...0.11.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 7.4.0 to 8.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.0.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync Cluster PubSub\u003c/h3\u003e\n\u003cp\u003eThis release introduces full \u003cstrong\u003easyncio Cluster PubSub support\u003c/strong\u003e, bringing shard-channel capabilities (\u003ccode\u003eSSUBSCRIBE\u003c/code\u003e, \u003ccode\u003eSUNSUBSCRIBE\u003c/code\u003e, \u003ccode\u003eSPUBLISH\u003c/code\u003e) to the async \u003ccode\u003eRedisCluster\u003c/code\u003e client. The new \u003ccode\u003eClusterPubSub\u003c/code\u003e class in \u003ccode\u003eredis.asyncio.cluster\u003c/code\u003e automatically routes shard-channel subscriptions to the correct cluster node based on key-slot hashing, manages per-node PubSub connections, and supports round-robin message retrieval across nodes. Users can create a cluster pubsub instance via \u003ccode\u003eRedisCluster.pubsub()\u003c/code\u003e and use \u003ccode\u003essubscribe()\u003c/code\u003e, \u003ccode\u003esunsubscribe()\u003c/code\u003e, and \u003ccode\u003eget_sharded_message()\u003c/code\u003e just as they would with the sync cluster client.\u003c/p\u003e\n\u003ch3\u003eKeyspace and subkey notifications\u003c/h3\u003e\n\u003cp\u003eRedis Keyspace Notifications are now supported for standalone and cluster deployments in both sync and async modes. New classes — \u003ccode\u003eKeyspaceNotifications\u003c/code\u003e, \u003ccode\u003eClusterKeyspaceNotifications\u003c/code\u003e, \u003ccode\u003eAsyncKeyspaceNotifications\u003c/code\u003e, and \u003ccode\u003eAsyncClusterKeyspaceNotifications\u003c/code\u003e — provide a high-level API for keyspace/keyevent subscriptions and subkey notification families: \u003ccode\u003esubkeyspace\u003c/code\u003e, \u003ccode\u003esubkeyevent\u003c/code\u003e, \u003ccode\u003esubkeyspaceitem\u003c/code\u003e, and \u003ccode\u003esubkeyspaceevent\u003c/code\u003e. Convenience methods like \u003ccode\u003esubscribe_keyspace()\u003c/code\u003e, \u003ccode\u003esubscribe_keyevent()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyspace()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyevent()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyspaceitem()\u003c/code\u003e, and \u003ccode\u003esubscribe_subkeyspaceevent()\u003c/code\u003e simplify common patterns, with channel classes for both key and subkey channels.\u003c/p\u003e\n\u003cp\u003eIn cluster mode, subscriptions are managed across primary nodes because each node emits notifications only for keys it owns, with built-in topology-change handling. Sync \u003ccode\u003erun_in_thread()\u003c/code\u003e and async \u003ccode\u003elisten()\u003c/code\u003e workflows are supported.\u003c/p\u003e\n\u003ch3\u003eRedis Array commands(\u003ca href=\"https://redis.io/docs/latest/develop/data-types/arrays/\"\u003ehttps://redis.io/docs/latest/develop/data-types/arrays/\u003c/a\u003e)\u003c/h3\u003e\n\u003cp\u003eredis-py now supports \u003ca href=\"https://redis.io/docs/latest/develop/data-types/arrays/\"\u003eRedis Arrays\u003c/a\u003e, a preview Redis data type for sparse, index-addressable sequences of strings. New \u003ccode\u003eAR*\u003c/code\u003e command helpers cover indexed reads/writes, range scans, deletion, cursor-based insertion, ring-buffer writes, metadata, text search, and aggregation, including \u003ccode\u003eARGET\u003c/code\u003e, \u003ccode\u003eARSET\u003c/code\u003e, \u003ccode\u003eARMGET\u003c/code\u003e, \u003ccode\u003eARMSET\u003c/code\u003e, \u003ccode\u003eARSCAN\u003c/code\u003e, \u003ccode\u003eARGREP\u003c/code\u003e, \u003ccode\u003eARRING\u003c/code\u003e, and \u003ccode\u003eAROP\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eType Hints Improvements (breaking changes)\u003c/h3\u003e\n\u003cp\u003eThe \u003ccode\u003e@overload\u003c/code\u003e pattern has been applied systematically across \u003cstrong\u003ecore commands\u003c/strong\u003e (\u003ccode\u003ecore.py\u003c/code\u003e), \u003cstrong\u003eVectorSet commands\u003c/strong\u003e, and \u003cstrong\u003emodule commands\u003c/strong\u003e (Search, JSON, TimeSeries, Bloom filters) to provide distinct return types for sync and async clients. Previously, methods returned a combined \u003ccode\u003eResponseT\u003c/code\u003e (i.e., \u003ccode\u003eUnion[Awaitable[Any], Any]\u003c/code\u003e), which caused static analysis tools like mypy and Pyright to flag false positives. Now, sync clients see concrete return types (e.g., \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003ebool\u003c/code\u003e, \u003ccode\u003elist[str]\u003c/code\u003e) while async clients see \u003ccode\u003eAwaitable[...]\u003c/code\u003e wrappers. This is a \u003cstrong\u003ebreaking change for type-checking only\u003c/strong\u003e—runtime behavior is unchanged, but code relying on the old union return types in type annotations may need updates. Two new protocol types, \u003ccode\u003eSyncClientProtocol\u003c/code\u003e and \u003ccode\u003eAsyncClientProtocol\u003c/code\u003e, are used in overload signatures to enable this distinction.\u003c/p\u003e\n\u003ch3\u003eRESP3 by default with opt-in unified responses\u003c/h3\u003e\n\u003cp\u003eredis-py 8.0.0 now uses RESP3 on the wire by default while preserving legacy RESP2-compatible Python response shapes for existing applications (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4052\"\u003e#4052\u003c/a\u003e). Protocol-independent unified response shapes are available by setting \u003ccode\u003elegacy_responses=False\u003c/code\u003e, so affected commands return the same Python structure with RESP2 or RESP3.\u003c/p\u003e\n\u003cp\u003eUse \u003ccode\u003eprotocol=2\u003c/code\u003e to force RESP2 on the wire, \u003ccode\u003eprotocol=3\u003c/code\u003e to opt into native RESP3 response shapes, or \u003ccode\u003elegacy_responses=False\u003c/code\u003e to migrate to unified responses. See \u003ca href=\"https://github.com/redis/redis-py/blob/HEAD/docs/unified_responses.rst\"\u003e\u003ccode\u003ehttps://github.com/redis/redis-py/blob/HEAD/docs/unified_responses.rst\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/redis/redis-py/blob/HEAD/specs/unified_responses_migration_guide.md\"\u003e\u003ccode\u003ehttps://github.com/redis/redis-py/blob/HEAD/specs/unified_responses_migration_guide.md\u003c/code\u003e\u003c/a\u003e for the affected commands and migration details.\u003c/p\u003e\n\u003ch3\u003eConnection and retry defaults\u003c/h3\u003e\n\u003cp\u003eDefault connection settings were updated: \u003ccode\u003esocket_timeout\u003c/code\u003e and \u003ccode\u003esocket_connect_timeout\u003c/code\u003e now default to 5 seconds, TCP keepalive is enabled by default, socket reads use a 32 KB buffer, connection pools default to \u003ccode\u003emax_connections=100\u003c/code\u003e, and retry defaults now use 10 attempts with exponential jitter backoff.\u003c/p\u003e\n\u003cp\u003eNote: \u003ccode\u003esocket_timeout\u003c/code\u003e can affect blocking commands such as \u003ccode\u003eBLPOP\u003c/code\u003e/\u003ccode\u003eBRPOP\u003c/code\u003e; if a command blocks longer than the client socket timeout, it may raise \u003ccode\u003eTimeoutError\u003c/code\u003e before the command timeout elapses (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/2807\"\u003e#2807\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003e🧪 Experimental Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for new array commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4055\"\u003e#4055\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Cluster PubSub in asyncio (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3736\"\u003e#3736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Redis Keyspace Notifications Support for Redis Cluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3962\"\u003e#3962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd random load balancing strategy which allows for use of the primary (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4027\"\u003e#4027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd FPHA (floating-point homogeneous array) arg support to JSON.SET (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4011\"\u003e#4011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded custom Claude command + XNACK command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4030\"\u003e#4030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding Time Series Multiple Aggregators support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4035\"\u003e#4035\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding support for new COUNT aggregator for some sorted set commands - ZINTER, ZINTERSTORE, ZUNION, ZUNIONSTORE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4034\"\u003e#4034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding support for new INCREX command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4067\"\u003e#4067\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4077\"\u003e#4077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for PubSub subscriptions with binary channel names and handlers (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4068\"\u003e#4068\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/redis/redis-py/commit/733f80ec633d6a772a6e1ccb1c0cca6fc1afb4b6\"\u003e\u003ccode\u003e733f80e\u003c/code\u003e\u003c/a\u003e Updates in default connection and retry settings (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4082\"\u003e#4082\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/a68a16c296591e902d0c749d31781550048f280f\"\u003e\u003ccode\u003ea68a16c\u003c/code\u003e\u003c/a\u003e Updating Redis supported versions in README.md and lib version to 8.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43a41d3d2956aa69eb0041655067ffaaaf23c6c3\"\u003e\u003ccode\u003e43a41d3\u003c/code\u003e\u003c/a\u003e Updating INCREX command arg - SATURATE now controls overflow behaviour (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4077\"\u003e#4077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/1496deba3801605cb123cb1b67adda50e85cd1e5\"\u003e\u003ccode\u003e1496deb\u003c/code\u003e\u003c/a\u003e Preserve explicit None for client metadata config (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4081\"\u003e#4081\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/57dc08c550f82086afeaa68a7cd7e5df356f7217\"\u003e\u003ccode\u003e57dc08c\u003c/code\u003e\u003c/a\u003e Avoid zero-timeout async reads in hiredis connections readiness checks and re...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/cd54ddd25aa307dc7f05bc0e4387cfc294c0a4c8\"\u003e\u003ccode\u003ecd54ddd\u003c/code\u003e\u003c/a\u003e fix(typing): correct type annotation for XReadResponse (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4046\"\u003e#4046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/ab2d41fcf0f9477ac788822d7c430004076a27f2\"\u003e\u003ccode\u003eab2d41f\u003c/code\u003e\u003c/a\u003e Add support for PubSub subscriptions with binary channel names and handlers (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/ef24dc99b6f2aa9507f19aa4ce4be37745ed6c77\"\u003e\u003ccode\u003eef24dc9\u003c/code\u003e\u003c/a\u003e Randomize cluster startup node order during topology refresh (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4060\"\u003e#4060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/b604015aeb5abce4b576f9dc54ffe30a3f1ba8c6\"\u003e\u003ccode\u003eb604015\u003c/code\u003e\u003c/a\u003e Add CLAUDE.md and /sync-claude-md skill for managing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4066\"\u003e#4066\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/2b8b4fcc9986fbc1f188cc6a355d12eec814ee90\"\u003e\u003ccode\u003e2b8b4fc\u003c/code\u003e\u003c/a\u003e Fix flaky tests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4071\"\u003e#4071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v7.4.0...v8.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `virtualenv` from 21.3.3 to 21.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/virtualenv/releases\"\u003evirtualenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.4.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(create): debug build venvlauncher lookup on Windows 3.13+ by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3151\"\u003epypa/virtualenv#3151\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.4.0...21.4.1\"\u003ehttps://github.com/pypa/virtualenv/compare/21.4.0...21.4.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e21.4.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix Mermaid flowchart rendering by \u003ca href=\"https://github.com/Herrtian\"\u003e\u003ccode\u003e@​Herrtian\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3147\"\u003epypa/virtualenv#3147\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(create): remove dead code and document droppable paths by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3149\"\u003epypa/virtualenv#3149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(create): support Windows debug builds and remove dead code by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3150\"\u003epypa/virtualenv#3150\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/Herrtian\"\u003e\u003ccode\u003e@​Herrtian\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3147\"\u003epypa/virtualenv#3147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.3.3...21.4.0\"\u003ehttps://github.com/pypa/virtualenv/compare/21.3.3...21.4.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst\"\u003evirtualenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eBugfixes - 21.4.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix Windows debug build \u003ccode\u003evenvlauncher_d.exe\u003c/code\u003e substitution never triggering because \u003ccode\u003eexecutables()\u003c/code\u003e compared the\nsource executable name instead of the target name, and fix \u003ccode\u003eAttributeError\u003c/code\u003e on \u003ccode\u003edebug_build\u003c/code\u003e attribute for\ninterpreter info objects missing the field - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e3151\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev21.4.0 (2026-05-28)\u003c/p\u003e\n\u003chr /\u003e\n\u003ch1\u003eFeatures - 21.4.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRemove dead code targeting Python versions below the supported target range (PyPy 3.6, deprecated importlib APIs) and\nsimplify the runtime import hook in \u003ccode\u003e_virtualenv.py\u003c/code\u003e - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e3149\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Windows debug builds (\u003ccode\u003epython_d.exe\u003c/code\u003e, \u003ccode\u003evenvlauncher_d.exe\u003c/code\u003e) matching CPython venv behavior, remove dead\n\u003ccode\u003e__SCRIPT_DIR__\u003c/code\u003e replacement and \u003ccode\u003ehas_shim\u003c/code\u003e version guard, drop unreachable Python 3.7 branch from\n\u003ccode\u003epyvenv_launch_patch_active\u003c/code\u003e, and fix wheel deprecation message to say \u003ccode\u003e\u0026gt;= 3.9\u003c/code\u003e - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e.\n(:issue:\u003ccode\u003e3150\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev21.3.3 (2026-05-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/e88f194c574fba787a9f44a0568042974d45a539\"\u003e\u003ccode\u003ee88f194\u003c/code\u003e\u003c/a\u003e release 21.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/6a2d79cd8077035a8a9d08b8501975eead13b496\"\u003e\u003ccode\u003e6a2d79c\u003c/code\u003e\u003c/a\u003e 🐛 fix(create): debug build venvlauncher lookup on Windows 3.13+ (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3151\"\u003e#3151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/30bcf62a65d262b85f3272a7f9b91397f712a13b\"\u003e\u003ccode\u003e30bcf62\u003c/code\u003e\u003c/a\u003e release 21.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/61434984154e4474c478301e433071efd880ad8c\"\u003e\u003ccode\u003e6143498\u003c/code\u003e\u003c/a\u003e ✨ feat(create): support Windows debug builds and remove dead code (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3150\"\u003e#3150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/ceaf88f8736c253ca71d155bb08b8475deebda02\"\u003e\u003ccode\u003eceaf88f\u003c/code\u003e\u003c/a\u003e ♻️ refactor(create): remove dead code and document droppable paths (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3149\"\u003e#3149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http...\n\n_Description has been truncated_","html_url":"https://github.com/Beaconchain-us/prefect/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Beaconchain-us%2Fprefect/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"},{"uuid":"4520292152","node_id":"PR_kwDOSnyC9c7fNY-Z","number":49,"state":"open","title":"Bump cachetools from 6.2.4 to 7.1.4","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-05-26T00:18:19.000Z","updated_at":"2026-05-26T00:18:20.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"cachetools","old_version":"6.2.4","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.4 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!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/v6.2.4...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=pip\u0026previous-version=6.2.4\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/WilsonMariano/geonode/pull/49","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilsonMariano%2Fgeonode/issues/49","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/49/packages"},{"uuid":"4515496989","node_id":"PR_kwDOR9avIM7e93MM","number":98,"state":"closed","title":"chore(api)(deps): Bump the python-minor-and-patch group in /apps/api with 4 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-25T08:30:44.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-25T08:29:52.000Z","updated_at":"2026-05-25T08:30:53.000Z","time_to_close":52,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(api)(deps): Bump","group_name":"python-minor-and-patch","update_count":4,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0"},{"name":"cachetools","old_version":"7.1.2","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"}],"path":"/apps/api","ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group in /apps/api with 4 updates: [fastapi](https://github.com/fastapi/fastapi), [uvicorn[standard]](https://github.com/Kludex/uvicorn), [cachetools](https://github.com/tkem/cachetools) and [pyjwt](https://github.com/jpadilla/pyjwt).\n\nUpdates `fastapi` from 0.136.1 to 0.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.47.0 to 0.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\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[standard]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.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.1.2 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.2...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.12.1 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\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__\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/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\u003eSee full diff in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/gofrolist/project-800ms/pull/98","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/gofrolist%2Fproject-800ms/issues/98","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/98/packages"},{"uuid":"4514371304","node_id":"PR_kwDODcMJdM7e6PX8","number":22619,"state":"open","title":"core: bump cachetools from 7.1.3 to 7.1.4","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-25T04:55:55.000Z","updated_at":"2026-05-25T05:11:29.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"core","packages":[{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=uv\u0026previous-version=7.1.3\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/goauthentik/authentik/pull/22619","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/goauthentik%2Fauthentik/issues/22619","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22619/packages"},{"uuid":"4513648139","node_id":"PR_kwDORJUzUs7e39tL","number":930,"state":"open","title":"chore(deps): update cachetools requirement from \u003e=7.1.1 to \u003e=7.1.4 in /scripts","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-25T01:27:29.000Z","updated_at":"2026-05-25T01:27:32.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"cachetools","old_version":"\u003e=7.1.1","new_version":"\u003e=7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":"/scripts","ecosystem":"pip"},"body":"Updates the requirements on [cachetools](https://github.com/tkem/cachetools) to permit the latest version.\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!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.1.1...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Twodragon0/investing/pull/930","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Twodragon0%2Finvesting/issues/930","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/930/packages"},{"uuid":"4513459089","node_id":"PR_kwDOPi7ob87e3YRZ","number":334,"state":"open","title":"fix(deps): Bump cachetools from 6.2.6 to 7.1.1 in /python","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-25T00:31:53.000Z","updated_at":"2026-05-25T00:33:45.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(deps): Bump","packages":[{"name":"cachetools","old_version":"6.2.6","new_version":"7.1.1","repository_url":"https://github.com/tkem/cachetools"}],"path":"/python","ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.6 to 7.1.1.\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.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\u003ch1\u003ev7.0.5 (2026-03-09)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMinor \u003ccode\u003e@cachedmethod\u003c/code\u003e performance improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.4 (2026-03-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix and properly document \u003ccode\u003e@cachedmethod.cache_key\u003c/code\u003e behavior.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMinor documentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.3 (2026-03-05)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eDeprecationWarning\u003c/code\u003e when creating an autospec mock with\n\u003ccode\u003e@cachedmethod\u003c/code\u003e decorations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.2 (2026-03-02)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eProvide more efficient \u003ccode\u003eclear()\u003c/code\u003e implementation for all support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/2e6a2d21c44e83b56c06cc9dd738e5b7a097ce6a\"\u003e\u003ccode\u003e2e6a2d2\u003c/code\u003e\u003c/a\u003e Release v7.1.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/cc065582849e3658d2c92aac0f5c2b6271ed077f\"\u003e\u003ccode\u003ecc06558\u003c/code\u003e\u003c/a\u003e Minor typing improvements.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/193dd62d9be4e1099039e8fba59a1fe50e8f4d08\"\u003e\u003ccode\u003e193dd62\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/393\"\u003e#393\u003c/a\u003e: Improve ambiguous overloads for decorators.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/1ea3422e058ef8b6b7dc15beb9d44d8f7c195a62\"\u003e\u003ccode\u003e1ea3422\u003c/code\u003e\u003c/a\u003e Bump release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/d9874465a6ab6f9d1d56cef91370f9c237a7eca6\"\u003e\u003ccode\u003ed987446\u003c/code\u003e\u003c/a\u003e Release v7.1.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/3d79e80a4a54892d1552cd17da8e27920c1918d8\"\u003e\u003ccode\u003e3d79e80\u003c/code\u003e\u003c/a\u003e Update Copilot Instructions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/83fe6bc78d0155a0036dda8a8eb1a2ddb8f26c60\"\u003e\u003ccode\u003e83fe6bc\u003c/code\u003e\u003c/a\u003e Add tox pyright check.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/bd3fbc49212eb948e08e9c478e5901f1293fd1f4\"\u003e\u003ccode\u003ebd3fbc4\u003c/code\u003e\u003c/a\u003e Improve typing support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/09dd6fec4b1b2339451ab26d1ca3c7a049b8c38c\"\u003e\u003ccode\u003e09dd6fe\u003c/code\u003e\u003c/a\u003e Improve original type stubs from typeshed.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/873c7013ea92b16f2f24a6001e625fabfdf951a5\"\u003e\u003ccode\u003e873c701\u003c/code\u003e\u003c/a\u003e Add typeshed typings.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v6.2.6...v7.1.1\"\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=cachetools\u0026package-manager=pip\u0026previous-version=6.2.6\u0026new-version=7.1.1)](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\n\n🤖 **Auto-generated PR Summary**\n\n## 📝 Changes Summary\n\n### Recent Commits:\n- a022af7 fix(deps): Bump cachetools from 6.2.6 to 7.1.1 in /python\n\n## 📁 Files Changed\n\n**Total files changed: 1**\n\n- 📄 **Other**: 1 files\n\n\u003cdetails\u003e\n\u003csummary\u003e📋 Detailed File List\u003c/summary\u003e\n\n#### 🧪 Tests\n\n\n#### 📚 Documentation\n\n\n#### 🔧 Source Code\n\n\n#### ⚙️ Configuration\n\n\n#### 📄 Other Files\n\n- `python/requirements.txt`\n\n\u003c/details\u003e\n\n## 🏷️ Change Type\n\n\n## ✅ Review Checklist\n\n- [ ] Code follows project conventions (Biome linting)\n- [ ] TypeScript types are properly defined\n- [ ] Tests are added/updated for new functionality\n- [ ] Documentation is updated if necessary\n- [ ] All CI checks pass\n- [ ] Breaking changes are documented\n\n---\n\n*🤖 This description was automatically generated from code changes*","html_url":"https://github.com/ksleep98/napoleon-game-4players/pull/334","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksleep98%2Fnapoleon-game-4players/issues/334","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/334/packages"},{"uuid":"4512532378","node_id":"PR_kwDOSXLGM87e0lKU","number":11,"state":"closed","title":"chore(deps): bump the uv-dependencies group across 1 directory with 6 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-31T04:32:17.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-24T18:25:58.000Z","updated_at":"2026-05-31T04:32:19.000Z","time_to_close":554779,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv-dependencies","update_count":6,"packages":[{"name":"click","old_version":"8.4.0","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"uv","old_version":"0.11.15","new_version":"0.11.16","repository_url":"https://github.com/astral-sh/uv"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-dependencies group with 6 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [click](https://github.com/pallets/click) | `8.4.0` | `8.4.1` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.3` | `7.1.4` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.48.0` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.15` | `0.11.16` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n\n\nUpdates `click` from 8.4.0 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\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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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.4.0...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\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.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\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.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\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.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uv` from 0.11.15 to 0.11.16\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/releases\"\u003euv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow disabling reading the system config with \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19476\"\u003e#19476\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure that incompatible wheel hints do not leak secrets (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19504\"\u003e#19504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unsafe entry points in \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19495\"\u003e#19495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict delimiters in entry point parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19471\"\u003e#19471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euv-netrc: fix multi-word no-space comment lines causing parse errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19494\"\u003e#19494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument and test relative exclude-newer support for uv pip (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19475\"\u003e#19475\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall uv 0.11.16\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/uv/releases/download/0.11.16/uv-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload uv 0.11.16\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFile\u003c/th\u003e\n\u003cth\u003ePlatform\u003c/th\u003e\n\u003cth\u003eChecksum\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-aarch64-apple-darwin.tar.gz\"\u003euv-aarch64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eApple Silicon macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-aarch64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/blob/main/CHANGELOG.md\"\u003euv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow disabling reading the system config with \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19476\"\u003e#19476\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure that incompatible wheel hints do not leak secrets (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19504\"\u003e#19504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unsafe entry points in \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19495\"\u003e#19495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict delimiters in entry point parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19471\"\u003e#19471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euv-netrc: fix multi-word no-space comment lines causing parse errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19494\"\u003e#19494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument and test relative exclude-newer support for uv pip (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19475\"\u003e#19475\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/135a3636789bb6886e0a7876f58cb4dbb270ba6d\"\u003e\u003ccode\u003e135a363\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.16 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19522\"\u003e#19522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/3b5f99412c7050f1050c09d2b7a48f82c333adfa\"\u003e\u003ccode\u003e3b5f994\u003c/code\u003e\u003c/a\u003e Add a \u003ccode\u003euv lock\u003c/code\u003e check to CI (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19524\"\u003e#19524\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4ffb506acf2b3d4dfd9a343a3cee53abe63a4de7\"\u003e\u003ccode\u003e4ffb506\u003c/code\u003e\u003c/a\u003e Improve crates.io new crate error message (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19523\"\u003e#19523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/51ba989e678ba1558ed48e1ea3e66d01a6dc30b3\"\u003e\u003ccode\u003e51ba989\u003c/code\u003e\u003c/a\u003e Add support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c07a6efb380b2ecd39161194aa7f3bb5d3f967ca\"\u003e\u003ccode\u003ec07a6ef\u003c/code\u003e\u003c/a\u003e Reject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/58a6734719d19da5335a5985843435745ff93320\"\u003e\u003ccode\u003e58a6734\u003c/code\u003e\u003c/a\u003e Allow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c1477e2b0f9e0ef510554ebfdf76aa68d477dfe6\"\u003e\u003ccode\u003ec1477e2\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e in tests to avoid reading machine-global config (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4648a0b9e67c2abfd5aa1404d2daeac800b987f5\"\u003e\u003ccode\u003e4648a0b\u003c/code\u003e\u003c/a\u003e uv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/e2375abfe10d0e2326bf29c5f425b38f71ebf7db\"\u003e\u003ccode\u003ee2375ab\u003c/code\u003e\u003c/a\u003e Test \u003ccode\u003ecreate_junction\u003c/code\u003e changes from \u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19402\"\u003e#19402\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19487\"\u003e#19487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/547bf2f9e7f4ff8b3e8a974e0cad3159ac04bb8c\"\u003e\u003ccode\u003e547bf2f\u003c/code\u003e\u003c/a\u003e Avoid unwrapping from \u003ccode\u003eOnceMap\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19510\"\u003e#19510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/uv/compare/0.11.15...0.11.16\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-codspeed` from 5.0.2 to 5.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/CodSpeedHQ/pytest-codspeed/releases\"\u003epytest-codspeed's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore: move callgrind skip obj API to instrument-hooks by \u003ca href=\"https://github.com/not-matthias\"\u003e\u003ccode\u003e@​not-matthias\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CodSpeedHQ/pytest-codspeed/pull/123\"\u003eCodSpeedHQ/pytest-codspeed#123\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/CodSpeedHQ/pytest-codspeed/compare/v5.0.2...v5.0.3\"\u003ehttps://github.com/CodSpeedHQ/pytest-codspeed/compare/v5.0.2...v5.0.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/CodSpeedHQ/pytest-codspeed/blob/master/CHANGELOG.md\"\u003epytest-codspeed's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[5.0.3] - 2026-05-22\u003c/h2\u003e\n\u003ch3\u003e\u003c!-- raw HTML omitted --\u003e🏗️ Refactor\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse instrument_hooks_callgrind_add_obj_skip from C API by \u003ca href=\"https://github.com/not-matthias\"\u003e\u003ccode\u003e@​not-matthias\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CodSpeedHQ/pytest-codspeed/pull/123\"\u003e#123\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/CodSpeedHQ/pytest-codspeed/commit/b2d12d8e96704c82b449d8668818a754ede45c66\"\u003e\u003ccode\u003eb2d12d8\u003c/code\u003e\u003c/a\u003e Release v5.0.3 🚀\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CodSpeedHQ/pytest-codspeed/commit/31447b7b6fba4ff9a5bdf5c0d046b7d8936cab5c\"\u003e\u003ccode\u003e31447b7\u003c/code\u003e\u003c/a\u003e refactor: use instrument_hooks_callgrind_add_obj_skip from C API\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/CodSpeedHQ/pytest-codspeed/compare/v5.0.2...v5.0.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/Beaconchain-us/prefect/pull/11","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Beaconchain-us%2Fprefect/issues/11","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/11/packages"},{"uuid":"4506548171","node_id":"PR_kwDOGuafp87eipch","number":23,"state":"closed","title":"build(deps-dev): bump the python-deps group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-30T02:25:04.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-23T02:25:59.000Z","updated_at":"2026-05-30T02:25:06.000Z","time_to_close":604745,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps-dev): bump","group_name":"python-deps","update_count":15,"packages":[{"name":"tox","old_version":"4.53.1","new_version":"4.54.0","repository_url":"https://github.com/tox-dev/tox"},{"name":"cachetools","old_version":"7.1.1","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.5.20","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.13.5","new_version":"7.14.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-stubs","old_version":"6.0.3","new_version":"6.0.4","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.3","new_version":"6.0.4","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"idna","old_version":"3.13","new_version":"3.16","repository_url":"https://github.com/kjd/idna"},{"name":"librt","old_version":"0.10.0","new_version":"0.11.0","repository_url":"https://github.com/mypyc/librt"},{"name":"mypy","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python/mypy"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"python-discovery","old_version":"1.3.0","new_version":"1.3.1","repository_url":"https://github.com/tox-dev/python-discovery"},{"name":"tomlkit","old_version":"0.14.0","new_version":"0.15.0","repository_url":"https://github.com/python-poetry/tomlkit"},{"name":"uv","old_version":"0.11.12","new_version":"0.11.16","repository_url":"https://github.com/astral-sh/uv"},{"name":"virtualenv","old_version":"21.3.1","new_version":"21.3.3","repository_url":"https://github.com/pypa/virtualenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-deps group with 15 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [tox](https://github.com/tox-dev/tox) | `4.53.1` | `4.54.0` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.1` | `7.1.4` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.5.20` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.5` | `7.14.0` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.3` | `6.0.4` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.3` | `6.0.4` |\n| [idna](https://github.com/kjd/idna) | `3.13` | `3.16` |\n| [librt](https://github.com/mypyc/librt) | `0.10.0` | `0.11.0` |\n| [mypy](https://github.com/python/mypy) | `2.0.0` | `2.1.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [python-discovery](https://github.com/tox-dev/python-discovery) | `1.3.0` | `1.3.1` |\n| [tomlkit](https://github.com/python-poetry/tomlkit) | `0.14.0` | `0.15.0` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.12` | `0.11.16` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.3.1` | `21.3.3` |\n\n\nUpdates `tox` from 4.53.1 to 4.54.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/tox/releases\"\u003etox's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.54.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🧪 test(conftest): strip broken nspkg.pth files under py3.15 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/tox/pull/3937\"\u003etox-dev/tox#3937\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(packaging): declare tox.pytest deps via a testing extra 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/tox/pull/3940\"\u003etox-dev/tox#3940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(schema): cover every replace form in the TOML schema 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/tox/pull/3941\"\u003etox-dev/tox#3941\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/tox/compare/4.53.1...4.54.0\"\u003ehttps://github.com/tox-dev/tox/compare/4.53.1...4.54.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/tox/blob/main/docs/changelog.rst\"\u003etox's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFeatures - 4.54.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eDeclare the runtime dependencies of the \u003ccode\u003etox.pytest\u003c/code\u003e plugin (\u003ccode\u003epytest\u003c/code\u003e, \u003ccode\u003edevpi-process\u003c/code\u003e and \u003ccode\u003epytest-mock\u003c/code\u003e)\nunder a new \u003ccode\u003etesting\u003c/code\u003e extra, so plugin authors can pull them in via \u003ccode\u003etox[testing]\u003c/code\u003e - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e.\n(:issue:\u003ccode\u003e3938\u003c/code\u003e, :issue:\u003ccode\u003e3940\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eBug fixes - 4.54.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eExtend the generated TOML schema to cover every \u003ccode\u003ereplace\u003c/code\u003e table form (\u003ccode\u003eenv\u003c/code\u003e, \u003ccode\u003eref\u003c/code\u003e, \u003ccode\u003eposargs\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e,\n\u003ccode\u003eif\u003c/code\u003e), including conditional replacements used inside \u003ccode\u003ecommands\u003c/code\u003e. A guard test asserts the schema stays in sync\nwith the loader implementation so future replace types cannot be added without a corresponding schema entry.\n(:issue:\u003ccode\u003e3939\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev4.53.1 (2026-05-02)\u003c/p\u003e\n\u003chr /\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/1f1fcc7a53665a827d8a304190696c6926ebb2eb\"\u003e\u003ccode\u003e1f1fcc7\u003c/code\u003e\u003c/a\u003e release 4.54.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/b35c8eedaf94906ed0e7938c7526dced550e6fa0\"\u003e\u003ccode\u003eb35c8ee\u003c/code\u003e\u003c/a\u003e 🐛 fix(schema): cover every replace form in the TOML schema (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3941\"\u003e#3941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/6eb5c4f5eec439b3924d6adb3d9d16ea7fc88a20\"\u003e\u003ccode\u003e6eb5c4f\u003c/code\u003e\u003c/a\u003e ✨ feat(packaging): declare tox.pytest deps via a testing extra (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3940\"\u003e#3940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/1ad47ddaab21c891f136a9627d1c6cdb6ea655d7\"\u003e\u003ccode\u003e1ad47dd\u003c/code\u003e\u003c/a\u003e 🧪 test(conftest): strip broken nspkg.pth files under py3.15 (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3937\"\u003e#3937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/dfba9661b10aa5148daf7267b80fec50f4faa9d2\"\u003e\u003ccode\u003edfba966\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3936\"\u003e#3936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/21069af5f5b93774f88c271d5deb1389cd2caf12\"\u003e\u003ccode\u003e21069af\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3933\"\u003e#3933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/tox/compare/4.53.1...4.54.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.1.1 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\u003c/blockquote\u003e\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.1.1...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.4.22 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\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.05.20\"\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.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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\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\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.3.3...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.13.5 to 7.14.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.14.0 — 2026-05-10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFeature: now when running one of the reporting commands, if there are\nparallel data files that need combining, they will be implicitly combined\nbefore creating the report. There is no option to avoid the combination; let\nus know if you have a use case that requires it.  Thanks, \u003ccode\u003eTim Hatch \u0026lt;pull 2162_\u0026gt;\u003c/code\u003e\u003cem\u003e. Closes \u003ccode\u003eissue 1781\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the output from \u003ccode\u003ecombine\u003c/code\u003e was too verbose, listing each file\nconsidered. Now it shows a single line with the counts of files combined,\nfiles skipped, and files with errors. The \u003ccode\u003e-q\u003c/code\u003e flag suppresses this line.\nThe old detailed lines are available with the new \u003ccode\u003e--debug=combine\u003c/code\u003e option.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: running a Python file through a symlink now sets the sys.path correctly,\nmatching regular Python behavior. Fixes \u003ccode\u003eissue 2157\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003eCollector.flush_data\u003c/code\u003e could fail with \u0026quot;RuntimeError: Set changed\nsize during iteration\u0026quot; when a tracer in another thread added a line to the\nper-file set that \u003ccode\u003eadd_lines\u003c/code\u003e (or \u003ccode\u003eadd_arcs\u003c/code\u003e) was iterating. The values\npassed to \u003ccode\u003eCoverageData\u003c/code\u003e are now snapshotted via \u003ccode\u003edict.copy()\u003c/code\u003e and\n\u003ccode\u003eset.copy()\u003c/code\u003e, which are atomic under the GIL. Thanks, \u003ccode\u003eAlex Vandiver \u0026lt;pull 2165_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the soft keyword \u003ccode\u003elazy\u003c/code\u003e is now bolded in HTML reports.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWe are no longer testing eventlet support. Eventlet started issuing stern\ndeprecation warnings that break our tests. Our support code is still there.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 1781: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/1781\"\u003ecoveragepy/coveragepy#1781\u003c/a\u003e\n.. _issue 2157: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2157\"\u003ecoveragepy/coveragepy#2157\u003c/a\u003e\n.. _pull 2162: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2162\"\u003ecoveragepy/coveragepy#2162\u003c/a\u003e\n.. _pull 2165: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2165\"\u003ecoveragepy/coveragepy#2165\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-13-5:\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/646351b60429f1b5760af6c1b97b28483244a955\"\u003e\u003ccode\u003e646351b\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/39cd015505c8b04369c5b06e34fc22449a697370\"\u003e\u003ccode\u003e39cd015\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/649e8aa34af7d80c386ae82e8a3a6c9a3acb0dab\"\u003e\u003ccode\u003e649e8aa\u003c/code\u003e\u003c/a\u003e docs: thanks Alex Vandiver for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2165\"\u003e#2165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8cd392e3b5c4bc15d534aaec0c21714f9f518469\"\u003e\u003ccode\u003e8cd392e\u003c/code\u003e\u003c/a\u003e fix: snapshot data in Collector.flush_data to avoid threading race (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2165\"\u003e#2165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c48e0edc2ebe44621b0053176e90f77b0c79bec1\"\u003e\u003ccode\u003ec48e0ed\u003c/code\u003e\u003c/a\u003e fix: less output for combining\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c2a3a284078556c911e0d9b6c6af1b7082a363ea\"\u003e\u003ccode\u003ec2a3a28\u003c/code\u003e\u003c/a\u003e docs: explain the change from \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2162\"\u003e#2162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1cd47aa6ac1da4e150da44055295d4e4f3a014e8\"\u003e\u003ccode\u003e1cd47aa\u003c/code\u003e\u003c/a\u003e fix: implicit combine-during-report now removes the combined data files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2d99fd7696e0bccec8037479a4e45c1ecccb8058\"\u003e\u003ccode\u003e2d99fd7\u003c/code\u003e\u003c/a\u003e feat: automatically combine coverage in report, thanks Tim Hatch (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2162\"\u003e#2162\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/9fbdcdfee1c122fac43f1bf9a5e2d1f4d835f21c\"\u003e\u003ccode\u003e9fbdcdf\u003c/code\u003e\u003c/a\u003e fix: lazy soft keywords are bolded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/5de7d0267b9466d59995aaae1a7e707c8c6f66e7\"\u003e\u003ccode\u003e5de7d02\u003c/code\u003e\u003c/a\u003e build: oops, misplaced quote\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.13.5...7.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs` from 6.0.3 to 6.0.4\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/928eec423b8454590a46e50653698d85954f04de\"\u003e\u003ccode\u003e928eec4\u003c/code\u003e\u003c/a\u003e Version 6.0.4 release (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3375\"\u003e#3375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/a9942040a2ed28b8e1ae129578c1f5a4f2b449b8\"\u003e\u003ccode\u003ea994204\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v2 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3374\"\u003e#3374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ec8107b44d798a16b42ff049fe3904c9a4b5df08\"\u003e\u003ccode\u003eec8107b\u003c/code\u003e\u003c/a\u003e Update dependency pyrefly to v0.64.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/28d997bc1e6559579ce3f4663178a8294e402897\"\u003e\u003ccode\u003e28d997b\u003c/code\u003e\u003c/a\u003e Remove unused get_field_lookup_exact_type from helpers (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3372\"\u003e#3372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/d312d60b1d7e852f73babe2a76be1d2961b94393\"\u003e\u003ccode\u003ed312d60\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.14 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3371\"\u003e#3371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/f20e49018f19e84a839ab5d11ac47654e671728a\"\u003e\u003ccode\u003ef20e490\u003c/code\u003e\u003c/a\u003e Update Django to 6.0.5 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3369\"\u003e#3369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/6d9d0e26fff5462782bfeede76ffd8b2cc36712d\"\u003e\u003ccode\u003e6d9d0e2\u003c/code\u003e\u003c/a\u003e Resolve default_alias for positional Aggregate in annotate() (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3362\"\u003e#3362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/6dd9231e36393d5ddaecb5d0ffca2a6b824bf0cc\"\u003e\u003ccode\u003e6dd9231\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.58.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3368\"\u003e#3368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e270482574c273798d875f2191945f64dbb0c00a\"\u003e\u003ccode\u003ee270482\u003c/code\u003e\u003c/a\u003e Update dependency psycopg to v3.3.4 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3365\"\u003e#3365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/cfb0f9a098e24d47f1c3cc5c5de971b599c6e907\"\u003e\u003ccode\u003ecfb0f9a\u003c/code\u003e\u003c/a\u003e Update dependency pyrefly to v0.63.1 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3367\"\u003e#3367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.3...6.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs-ext` from 6.0.3 to 6.0.4\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/928eec423b8454590a46e50653698d85954f04de\"\u003e\u003ccode\u003e928eec4\u003c/code\u003e\u003c/a\u003e Version 6.0.4 release (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3375\"\u003e#3375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/a9942040a2ed28b8e1ae129578c1f5a4f2b449b8\"\u003e\u003ccode\u003ea994204\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v2 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3374\"\u003e#3374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ec8107b44d798a16b42ff049fe3904c9a4b5df08\"\u003e\u003ccode\u003eec8107b\u003c/code\u003e\u003c/a\u003e Update dependency pyrefly to v0.64.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/28d997bc1e6559579ce3f4663178a8294e402897\"\u003e\u003ccode\u003e28d997b\u003c/code\u003e\u003c/a\u003e Remove unused get_field_lookup_exact_type from helpers (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3372\"\u003e#3372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/d312d60b1d7e852f73babe2a76be1d2961b94393\"\u003e\u003ccode\u003ed312d60\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.14 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3371\"\u003e#3371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/f20e49018f19e84a839ab5d11ac47654e671728a\"\u003e\u003ccode\u003ef20e490\u003c/code\u003e\u003c/a\u003e Update Django to 6.0.5 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3369\"\u003e#3369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/6d9d0e26fff5462782bfeede76ffd8b2cc36712d\"\u003e\u003ccode\u003e6d9d0e2\u003c/code\u003e\u003c/a\u003e Resolve default_alias for positional Aggregate in annotate() (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3362\"\u003e#3362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/6dd9231e36393d5ddaecb5d0ffca2a6b824bf0cc\"\u003e\u003ccode\u003e6dd9231\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.58.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3368\"\u003e#3368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e270482574c273798d875f2191945f64dbb0c00a\"\u003e\u003ccode\u003ee270482\u003c/code\u003e\u003c/a\u003e Update dependency psycopg to v3.3.4 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3365\"\u003e#3365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/cfb0f9a098e24d47f1c3cc5c5de971b599c6e907\"\u003e\u003ccode\u003ecfb0f9a\u003c/code\u003e\u003c/a\u003e Update dependency pyrefly to v0.63.1 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3367\"\u003e#3367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.3...6.0.4\"\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.16\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.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\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003c/blockquote\u003e\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/6d1a0de52a8b4690f1b2a89829aa85ff1de3635a\"\u003e\u003ccode\u003e6d1a0de\u003c/code\u003e\u003c/a\u003e Release 3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4e6cbe225a3e0b6e7eed2082086a12cba526e787\"\u003e\u003ccode\u003e4e6cbe2\u003c/code\u003e\u003c/a\u003e Demote installation instruction to usage section\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/223533c34c9e23470e714ed9b1f1c41867177732\"\u003e\u003ccode\u003e223533c\u003c/code\u003e\u003c/a\u003e Merge branch 'readme-simplification' into release-3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b1640b228a50b3c94ffcf8a664eb6cb186550f3e\"\u003e\u003ccode\u003eb1640b2\u003c/code\u003e\u003c/a\u003e Bump version to 3.16rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/3a861132be61091454aae10c292d98bcfd3cd797\"\u003e\u003ccode\u003e3a86113\u003c/code\u003e\u003c/a\u003e Update history for 3.16 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d4bc9e742b753cff2ec6c53bd4be730863ca9c53\"\u003e\u003ccode\u003ed4bc9e7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/246\"\u003e#246\u003c/a\u003e from kjd/python-3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a21d9fca6b04c47ddbd0303d62bbc0712b55f43d\"\u003e\u003ccode\u003ea21d9fc\u003c/code\u003e\u003c/a\u003e Update deprecation policy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b46492694aa21dc1c3608f59dd5b9620c08b2d0f\"\u003e\u003ccode\u003eb464926\u003c/code\u003e\u003c/a\u003e Raise minimum Python to 3.9 and modernize typing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7f3b15e8839f0e404a00054c4072e69347e727f2\"\u003e\u003ccode\u003e7f3b15e\u003c/code\u003e\u003c/a\u003e Explicit example not needed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7530c7020ae2bcf0acff1fafd71fb047a3b117ed\"\u003e\u003ccode\u003e7530c70\u003c/code\u003e\u003c/a\u003e Remove unnecessary print()\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.13...v3.16\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `librt` from 0.10.0 to 0.11.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/862679a0492f4433a286b2d53965ec2603623be1\"\u003e\u003ccode\u003e862679a\u003c/code\u003e\u003c/a\u003e Sync mypy and bump version to 0.11.0 (\u003ca href=\"https://redirect.github.com/mypyc/librt/issues/40\"\u003e#40\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/librt/compare/v0.10.0...v0.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.1\u003c/h2\u003e\n\u003cp\u003eWe’ve just uploaded mypy 2.1.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003elibrt.vecs: Fast Growable Array Type for Mypyc\u003c/h3\u003e\n\u003cp\u003eThe new \u003ccode\u003elibrt.vecs\u003c/code\u003e module provides an efficient growable array type \u003ccode\u003evec\u003c/code\u003e that is\noptimized for mypyc use. It provides fast, packed arrays with integer and floating point\nvalue types, which can be \u003cstrong\u003eseveral times faster\u003c/strong\u003e than \u003ccode\u003elist\u003c/code\u003e, and tens of times faster\nthan \u003ccode\u003earray.array\u003c/code\u003e in code compiled using mypyc. It also supports nested \u003ccode\u003evec\u003c/code\u003e objects and\nnon-value-type items, such as \u003ccode\u003evec[vec[str]]\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eRefer to the \u003ca href=\"https://mypyc.readthedocs.io/en/latest/librt_vecs.html\"\u003edocumentation\u003c/a\u003e for\nthe details.\u003c/p\u003e\n\u003cp\u003eContributed by Jukka Lehtosalo.\u003c/p\u003e\n\u003ch3\u003elibrt.random: Fast Pseudo-Random Number Generation\u003c/h3\u003e\n\u003cp\u003eThe new \u003ccode\u003elibrt.random\u003c/code\u003e module provides fast pseudo-random number generation that is\noptimized for code compiled using mypyc. It can be 3x to 10x faster than the stdlib\n\u003ccode\u003erandom\u003c/code\u003e module in compiled code.\u003c/p\u003e\n\u003cp\u003eRefer to the \u003ca href=\"https://mypyc.readthedocs.io/en/latest/librt_random.html\"\u003edocumentation\u003c/a\u003e for\nthe details.\u003c/p\u003e\n\u003cp\u003eContributed by Jukka Lehtosalo (PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21433\"\u003e21433\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMypyc Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake compilation order with multiple files consistent (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21419\"\u003e21419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash on accessing \u003ccode\u003eStopAsyncIteration\u003c/code\u003e (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21406\"\u003e21406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix incremental compilation with \u003ccode\u003eseparate\u003c/code\u003e flag (Vaggelis Danias, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21299\"\u003e21299\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes to Crashes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix crash on partial type with \u003ccode\u003e--allow-redefinition\u003c/code\u003e and \u003ccode\u003eglobal\u003c/code\u003e declaration (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21428\"\u003e21428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix broken awaitable generator patching (Ivan Levkivskyi, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21435\"\u003e21435\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges to Messages\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/python/mypy/commit/c1c336d7e34eb313080c79b156518c58d27c7234\"\u003e\u003ccode\u003ec1c336d\u003c/code\u003e\u003c/a\u003e Remove +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74df14b7cbf08140236aa45bbb7f42219b0b1df7\"\u003e\u003ccode\u003e74df14b\u003c/code\u003e\u003c/a\u003e Add changelog for mypy 2.1 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21464\"\u003e#21464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/022d9bc96f86c40f338a5cf150f1806cc8f300ff\"\u003e\u003ccode\u003e022d9bc\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;TypeForm: Enable by default (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21262\"\u003e#21262\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8826288214f1cb31496e610667481221e025359c\"\u003e\u003ccode\u003e8826288\u003c/code\u003e\u003c/a\u003e [mypyc] Document librt.random (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21463\"\u003e#21463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3f4067b699dbe52d08e42ef3b3ebfdebdc06bd96\"\u003e\u003ccode\u003e3f4067b\u003c/code\u003e\u003c/a\u003e Bump librt version to 0.11.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21458\"\u003e#21458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2b1eb58a250c5f1eb4ef5fb1f312ff528c5a1d4e\"\u003e\u003ccode\u003e2b1eb58\u003c/code\u003e\u003c/a\u003e [mypyc] Enable incremental self-compilation (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21369\"\u003e#21369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8152f4af3f6c03beaf2660026240f0fdce7feecc\"\u003e\u003ccode\u003e8152f4a\u003c/code\u003e\u003c/a\u003e Respect file config comments for stale modules (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21444\"\u003e#21444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/116d60bdd3fdfe8d97c6afe99370910db56f1b92\"\u003e\u003ccode\u003e116d60b\u003c/code\u003e\u003c/a\u003e Fix nondeterminism from nonassociativity of overload joins (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21455\"\u003e#21455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/6c4af8e42110cea3f84bc02add2ca7b89c268210\"\u003e\u003ccode\u003e6c4af8e\u003c/code\u003e\u003c/a\u003e Fix function call message change for small number of args (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21432\"\u003e#21432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4b8fdcaf24032592510e8f15421fb32d82a71800\"\u003e\u003ccode\u003e4b8fdca\u003c/code\u003e\u003c/a\u003e [mypyc] Add librt.random module (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21433\"\u003e#21433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/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 `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\nUpdates `python-discovery` from 1.3.0 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/tox-dev/python-discovery/releases\"\u003epython-discovery's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCanonicalize GraalPy implementation name. by \u003ca href=\"https://github.com/timfel\"\u003e\u003ccode\u003e@​timfel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/pull/73\"\u003etox-dev/python-discovery#73\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci(release): wire up towncrier-driven release pipeline 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/python-discovery/pull/74\"\u003etox-dev/python-discovery#74\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/timfel\"\u003e\u003ccode\u003e@​timfel\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/pull/73\"\u003etox-dev/python-discovery#73\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/python-discovery/compare/1.3.0...1.3.1\"\u003ehttps://github.com/tox-dev/python-discovery/compare/1.3.0...1.3.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/python-discovery/blob/main/docs/changelog.rst\"\u003epython-discovery's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eBug fixes - 1.3.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eexport normalize_isa and deprecate KNOWN_ARCHITECTURES - by :user:\u003ccode\u003erahuldevikar\u003c/code\u003e. (:issue:\u003ccode\u003e59\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ediscover uv-managed Pythons on Windows. Previously the glob assumed Unix layout (\u003ccode\u003e\u0026lt;root\u0026gt;/\u0026lt;key\u0026gt;/bin/python\u003c/code\u003e) and\nsilently found nothing on Windows, where uv places \u003ccode\u003epython.exe\u003c/code\u003e directly under the install root - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e65\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eCanonicalize GraalVM to match GraalPy Python interpreter in PythonSpec and PythonInfo. - by :user:\u003ccode\u003etimfel\u003c/code\u003e. (:issue:\u003ccode\u003e73\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev1.3.0 (2026-05-05)\u003c/p\u003e\n\u003chr /\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/python-discovery/commit/0d344843eae2e74c13eb739f2c043e177aa015b0\"\u003e\u003ccode\u003e0d34484\u003c/code\u003e\u003c/a\u003e release 1.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/python-discovery/commit/6840c417a47eea7c7ae0347838a63f89c1d24749\"\u003e\u003ccode\u003e6840c41\u003c/code\u003e\u003c/a\u003e 👷 ci(release): wire up towncrier-driven release pipeline (\u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/issues/74\"\u003e#74\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/python-discovery/commit/68f7dc15f51a4bdec413080077816b9e895b23cd\"\u003e\u003ccode\u003e68f7dc1\u003c/code\u003e\u003c/a\u003e Canonicalize GraalPy implementation name. (\u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/issues/73\"\u003e#73\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/python-discovery/commit/e7cff49eb8610590395e495f875e5d1e8771e24d\"\u003e\u003ccode\u003ee7cff49\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/issues/72\"\u003e#72\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/python-discovery/compare/1.3.0...1.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tomlkit` from 0.14.0 to 0.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-poetry/tomlkit/releases\"\u003etomlkit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(spec): update to toml spec v1.1 by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/456\"\u003epython-poetry/tomlkit#456\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/455\"\u003epython-poetry/tomlkit#455\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump virtualenv from 20.26.6 to 20.36.1 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/python-poetry/tomlkit/pull/454\"\u003epython-poetry/tomlkit#454\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/458\"\u003epython-poetry/tomlkit#458\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump pygments from 2.18.0 to 2.20.0 in /docs 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/python-poetry/tomlkit/pull/464\"\u003epython-poetry/tomlkit#464\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump pygments from 2.17.2 to 2.20.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/python-poetry/tomlkit/pull/463\"\u003epython-poetry/tomlkit#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump requests from 2.32.4 to 2.33.0 in /docs 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/python-poetry/tomlkit/pull/462\"\u003epython-poetry/tomlkit#462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/461\"\u003epython-poetry/tomlkit#461\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType annotations by \u003ca href=\"https://github.com/dimbleby\"\u003e\u003ccode\u003e@​dimbleby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/460\"\u003epython-poetry/tomlkit#460\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHonor sort_keys for parsed TOML documents by \u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/471\"\u003epython-poetry/tomlkit#471\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/469\"\u003epython-poetry/tomlkit#469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: fix a parser hang by \u003ca href=\"https://github.com/dimbleby\"\u003e\u003ccode\u003e@​dimbleby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/470\"\u003epython-poetry/tomlkit#470\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/472\"\u003epython-poetry/tomlkit#472\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump version to 0.15.0 and update changelog for release by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/473\"\u003epython-poetry/tomlkit#473\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/dimbleby\"\u003e\u003ccode\u003e@​dimbleby\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/460\"\u003epython-poetry/tomlkit#460\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/471\"\u003epython-poetry/tomlkit#471\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-poetry/tomlkit/compare/0.14.0...0.15.0\"\u003ehttps://github.com/python-poetry/tomlkit/compare/0.14.0...0.15.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-poetry/tomlkit/blob/master/CHANGELOG.md\"\u003etomlkit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.15.0] - 2026-05-10\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate parser to support TOML spec v1.1.0. (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/456\"\u003e#456\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-poetry/tomlkit/commit/8694e4d3323df68eb325bf3d5ab7caa66f8c206a\"\u003e\u003ccode\u003e8694e4d\u003c/code\u003e\u003c/a\u003e chore: bump version to 0.15.0 and update changelog for release (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/473\"\u003e#473\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/e636a5121260e811dba9fd1c33656021f6855490\"\u003e\u003ccode\u003ee636a51\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/472\"\u003e#472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/96a4d22fdd07e25742009a6bcd8a2d23e9b5574a\"\u003e\u003ccode\u003e96a4d22\u003c/code\u003e\u003c/a\u003e fix: fix a parser hang (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/843f79992139ec56266f52161b27a3eadd1f6a35\"\u003e\u003ccode\u003e843f799\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/469\"\u003e#469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/2c87eafe7c852d19c1b91a1c9bed4d47bd03816f\"\u003e\u003ccode\u003e2c87eaf\u003c/code\u003e\u003c/a\u003e Honor sort_keys for parsed TOML documents (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/471\"\u003e#471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/8e32f9cb7fcfbc45e893c34e0e9a590a26675fd6\"\u003e\u003ccode\u003e8e32f9c\u003c/code\u003e\u003c/a\u003e Type annotations (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/460\"\u003e#460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/df98af48778f865d270d2f53e816d3b0948c8927\"\u003e\u003ccode\u003edf98af4\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/461\"\u003e#461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/4bd97db2c8fda5cbffc01acc586e3328168bac36\"\u003e\u003ccode\u003e4bd97db\u003c/code\u003e\u003c/a\u003e chore(deps): bump requests from 2.32.4 to 2.33.0 in /docs (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/462\"\u003e#462\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/b2d703032bf2e44e680b67f2897c3a7c67be55eb\"\u003e\u003ccode\u003eb2d7030\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pygments from 2.17.2 to 2.20.0 (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/87d98b1d0100c5bd39736eda4cd9cc3d8e24bf48\"\u003e\u003ccode\u003e87d98b1\u003c/code\u003e\u003c/a\u003e chore(deps): bump pygments from 2.18.0 to 2.20.0 in /docs (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-poetry/tomlkit/compare/0.14.0...0.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uv` from 0.11.12 to 0.11.16\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/releases\"\u003euv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow disabling reading the system config with \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19476\"\u003e#19476\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure that incompatible wheel hints do not leak secrets (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19504\"\u003e#19504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unsafe entry points in \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19495\"\u003e#19495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict delimiters in entry point parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19471\"\u003e#19471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euv-netrc: fix multi-word no-space comment lines causing parse errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19494\"\u003e#19494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument and test relative exclude-newer support for uv pip (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19475\"\u003e#19475\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall uv 0.11.16\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/uv/releases/download/0.11.16/uv-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload uv 0.11.16\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFile\u003c/th\u003e\n\u003cth\u003ePlatform\u003c/th\u003e\n\u003cth\u003eChecksum\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-aarch64-apple-darwin.tar.gz\"\u003euv-aarch64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eApple Silicon macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-aarch64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/blob/main/CHANGELOG.md\"\u003euv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow disabling reading the system config with \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19476\"\u003e#19476\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure that incompatible wheel hints do not leak secrets (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19504\"\u003e#19504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unsafe entry points in \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19495\"\u003e#19495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict delimiters in entry point parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19471\"\u003e#19471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euv-netrc: fix multi-word no-space comment lines causing parse errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19494\"\u003e#19494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument and test relative exclude-newer support for uv pip (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19475\"\u003e#19475\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.11.15\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-18.\u003c/p\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix a TAR parser differential, see \u003ca href=\"https://github.com/astral-sh/tokio-tar/security/advisories/GHSA-3cv2-h65g-fgmm\"\u003eGHSA-3cv2-h65g-fgmm\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19463\"\u003e#19463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnforce that entry points cannot escape in the scripts directory, see \u003ca href=\"https://github.com/astral-sh/uv/security/advisories/GHSA-4gg8-gxpx-9rph\"\u003eGHSA-4gg8-gxpx-9rph\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19464\"\u003e#19464\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd TOML v1.1 -\u0026gt; v1.0 backwards compatibility for source distributions (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18741\"\u003e#18741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for Azure request signing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19421\"\u003e#19421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eApply stricter validation to all wheel filename segments (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19364\"\u003e#19364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject empty strings as an invalid package name (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19435\"\u003e#19435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse structured errors for signing authentication failures (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19422\"\u003e#19422\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: Add JSON output (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19305\"\u003e#19305\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/uv/commit/135a3636789bb6886e0a7876f58cb4dbb270ba6d\"\u003e\u003ccode\u003e135a363\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.16 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19522\"\u003e#19522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/3b5f99412c7050f1050c09d2b7a48f82c333adfa\"\u003e\u003ccode\u003e3b5f994\u003c/code\u003e\u003c/a\u003e Add a \u003ccode\u003euv lock\u003c/code\u003e check to CI (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19524\"\u003e#19524\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4ffb506acf2b3d4dfd9a343a3cee53abe63a4de7\"\u003e\u003ccode\u003e4ffb506\u003c/code\u003e\u003c/a\u003e Improve crates.io new crate error message (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19523\"\u003e#19523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/51ba989e678ba1558ed48e1ea3e66d01a6dc30b3\"\u003e\u003ccode\u003e51ba989\u003c/code\u003e\u003c/a\u003e Add support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c07a6efb380b2ecd39161194aa7f3bb5d3f967ca\"\u003e\u003ccode\u003ec07a6ef\u003c/code\u003e\u003c/a\u003e Reject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/58a6734719d19da5335a5985843435745ff93320\"\u003e\u003ccode\u003e58a6734\u003c/code\u003e\u003c/a\u003e Allow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c1477e2b0f9e0ef510554ebfdf76aa68d477dfe6\"\u003e\u003ccode\u003ec1477e2\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e in tests to avoid reading machine-global config (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4648a0b9e67c2abfd5aa1404d2daeac800b987f5\"\u003e\u003ccode\u003e4648a0b\u003c/code\u003e\u003c/a\u003e uv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/e2375abfe10d0e2326bf29c5f425b38f71ebf7db\"\u003e\u003ccode\u003ee2375ab\u003c/code\u003e\u003c/a\u003e Test \u003ccode\u003ecreate_junction\u003c/code\u003e changes from \u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19402\"\u003e#19402\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19487\"\u003e#19487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/547bf2f9e7f4ff8b3e8a974e0cad3159ac04bb8c\"\u003e\u003ccode\u003e547bf2f\u003c/code\u003e\u003c/a\u003e Avoid unwrapping from \u003ccode\u003eOnceMap\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19510\"\u003e#19510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/uv/compare/0.11.12...0.11.16\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `virtualenv` from 21.3.1 to 21.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/virtualenv/releases\"\u003evirtualenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.3.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAccept GraalPy implementation name. by \u003ca href=\"https://github.com/timfel\"\u003e\u003ccode\u003e@​timfel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3144\"\u003epypa/virtualenv#3144\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.3.2...21.3.3\"\u003ehttps://github.com/pypa/virtualenv/compare/21.3.2...21.3.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e21.3.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd 3.16 to embedded wheel versions by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3140\"\u003epypa/virtualenv#3140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(upgrade): regen embedded init with correct MAX and 3.16 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3143\"\u003epypa/virtualenv#3143\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.3.1...21.3.2\"\u003ehttps://github.com/pypa/virtualenv/compare/21.3.1...21.3.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/pypa/virtualenv/blob/main/docs/changelog.rst\"\u003evirtualenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eBugfixes - 21.3.3\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003erecognize GraalPy interpreters using the normalized \u003ccode\u003eGraalPy\u003c/code\u003e name - by :user:\u003ccode\u003etimfel\u003c/code\u003e. (:issue:\u003ccode\u003e3144\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev21.3.2 (2026-05-12)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003ev21.3.1 (2026-05-05)\u003c/p\u003e\n\u003chr /\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/e6dba2a503560c1561258770ade4d15529c4db3d\"\u003e\u003ccode\u003ee6dba2a\u003c/code\u003e\u003c/a\u003e release 21.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/e7517c0e56c159946374c2fed8fb874fd3bde94f\"\u003e\u003ccode\u003ee7517c0\u003c/code\u003e\u003c/a\u003e Accept GraalPy implementation name. (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3144\"\u003e#3144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/8531d47ff3e78492d0c1eb7d1159750e91176b67\"\u003e\u003ccode\u003e8531d47\u003c/code\u003e\u003c/a\u003e release 21.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/afefada9505d4fe67805244c31c5761e4c6c2622\"\u003e\u003ccode\u003eafefada\u003c/code\u003e\u003c/a\u003e 🐛 fix(upgrade): regen embedded init with correct MAX and 3.16 (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3143\"\u003e#3143\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/7e270411ebf5739dfc63998a9084dc2bfd2d467b\"\u003e\u003ccode\u003e7e27041\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3141\"\u003e#3141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/214934c9606ef792e42580109cbdff940a62f034\"\u003e\u003ccode\u003e214934c\u003c/code\u003e\u003c/a\u003e add 3.16 to embedded wheel versions (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3140\"\u003e#3140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.3.1...21.3.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/karthicraghupathi/django_rapyd_wiretap/pull/23","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/karthicraghupathi%2Fdjango_rapyd_wiretap/issues/23","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/23/packages"},{"uuid":"4502122071","node_id":"PR_kwDOKB1JPM7eUVqA","number":68,"state":"closed","title":"chore(deps): bump cachetools from 7.1.3 to 7.1.4","user":"dependabot[bot]","labels":["released","dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-22T11:08:40.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T11:08:25.000Z","updated_at":"2026-05-22T11:09:04.000Z","time_to_close":15,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=pip\u0026previous-version=7.1.3\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/hutchic-observe-meta/python-playground/pull/68","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/hutchic-observe-meta%2Fpython-playground/issues/68","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/68/packages"},{"uuid":"4475721777","node_id":"PR_kwDOSbTTLM7c-24h","number":6,"state":"open","title":"Bump the production-dependencies group with 22 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-19T08:28:06.000Z","updated_at":"2026-05-19T08:28:07.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":22,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.80.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"23.0.0","new_version":"26.0.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"pika","old_version":"1.3.2","new_version":"1.4.0","repository_url":"https://github.com/pika/pika"},{"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":"structlog","old_version":"25.2.0","new_version":"25.5.0","repository_url":"https://github.com/hynek/structlog"},{"name":"marshmallow","old_version":"3.26.2","new_version":"4.3.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.10.1","repository_url":"https://github.com/googleapis/python-storage"},{"name":"jsonpointer","old_version":"3.0.0","new_version":"3.1.1","repository_url":"https://github.com/stefankoegl/python-json-pointer"},{"name":"redis","old_version":"7.1.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.24","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.31"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.38.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.22.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"6.2.2","new_version":"7.1.3","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 22 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.3` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [google-cloud-datastore](https://github.com/googleapis/google-cloud-python) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.80.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `23.0.0` | `26.0.0` |\n| [pika](https://github.com/pika/pika) | `1.3.2` | `1.4.0` |\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| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.5.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.2` | `4.3.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.10.1` |\n| [jsonpointer](https://github.com/stefankoegl/python-json-pointer) | `3.0.0` | `3.1.1` |\n| [redis](https://github.com/redis/redis-py) | `7.1.0` | `7.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.24` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.31` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/google-cloud-python) | `2.29.0` | `2.38.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.22.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `4.1.1` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `6.2.2` | `7.1.3` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n\nUpdates `flask` from 3.1.1 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\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-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.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-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-os-login: v2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-os-login-v2.20.0...google-cloud-os-login-v2.21.0\"\u003ev2.21.0\u003c/a\u003e (2026-05-06)\u003c/h2\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/googleapis/google-cloud-python/blob/main/packages/google-cloud-documentai/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-documentai-v2.21.0\"\u003e2.21.0\u003c/a\u003e (2023-12-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for python 3.12 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce compatibility with native namespace packages (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire proto-plus \u0026gt;= 1.22.3 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eretry_async\u003c/code\u003e instead of \u003ccode\u003eretry\u003c/code\u003e in async client (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\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/c60ded47847b04b2536f19c1610b5592b7952d6a\"\u003e\u003ccode\u003ec60ded4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T181058Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15005\"\u003e#15005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c0e3e9d221c3b8cd6d99503fadbb8e643db1e325\"\u003e\u003ccode\u003ec0e3e9d\u003c/code\u003e\u003c/a\u003e chore: disable treat warnings as errors (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15008\"\u003e#15008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45d4cee9e0e48a209b2d9292be29a15125548458\"\u003e\u003ccode\u003e45d4cee\u003c/code\u003e\u003c/a\u003e docs(samples): Update BigQuery Storage Arrow samples batching logic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14961\"\u003e#14961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45149baca6064be265db1b653abb405c298a2b41\"\u003e\u003ccode\u003e45149ba\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T162506Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15001\"\u003e#15001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/d58a9ba338df3df1afca11e155fe449c32631179\"\u003e\u003ccode\u003ed58a9ba\u003c/code\u003e\u003c/a\u003e test: Add 'cryptography' 'cachetools' to test deps for bigquery-storage (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14999\"\u003e#14999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/10289465a87988b9bf35a85893f26ea372ad717b\"\u003e\u003ccode\u003e1028946\u003c/code\u003e\u003c/a\u003e feat: add v1 api for google-cloud-maintenance-api (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14998\"\u003e#14998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/b3cb4de3ce50c3ec55af2b132d756252a32641f3\"\u003e\u003ccode\u003eb3cb4de\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20260107T084051Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14995\"\u003e#14995\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17cc12897e6afdf3f3131531c50a8226a3f57c0f\"\u003e\u003ccode\u003e17cc128\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20251231T091651Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14991\"\u003e#14991\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c353aa5bcc937ef9399c8efc90492dadbcf01aa2\"\u003e\u003ccode\u003ec353aa5\u003c/code\u003e\u003c/a\u003e chore: librarian update image pull request: 20251219T024955Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14985\"\u003e#14985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f38453832a2bb0226c389c30df13d072d1642377\"\u003e\u003ccode\u003ef384538\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251217T215552Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14980\"\u003e#14980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-iam-v2.21.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.71.0 to 1.80.0\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.80.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.80.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglimmering\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[ssl] Implement TLS private key signer in Python. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41701\"\u003e#41701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Private Key Offload Implementation. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41606\"\u003e#41606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix max sockaddr struct size on OpenBSD. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40454\"\u003e#40454\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[core] Enable EventEngine for Python by default, and EventEngine fork support in Python and Ruby. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41432\"\u003e#41432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Create InMemoryCertificateProvider to update certificates independently. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41484\"\u003e#41484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Build/test ruby 4.0 and build native gems with Ruby 4.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41324\"\u003e#41324\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Remove an incorrect std::move in DNSServiceResolver constructor. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41502\"\u003e#41502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RR and WRR] enable change to connect from a random index. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41472\"\u003e#41472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement gRFC A101. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41051\"\u003e#41051\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C++] Add SNI override option to C++ channel credentials options API. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41460\"\u003e#41460\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC#\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C# tools] Option to append Async to server side method names \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39010\"\u003e#39010\u003c/a\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39797\"\u003e#39797\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Fix][Compiler] Plugins fall back to the edition 2023 for older protobuf. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41357\"\u003e#41357\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Disable php infinite recursion check for callback from Core to PHP. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41835\"\u003e#41835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Fix runtime error with PHp8.5 alpha because zend_exception_get_defaul…. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40337\"\u003e#40337\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Fix \u003ccode\u003eGRPC_TRACE\u003c/code\u003e not working when absl log initialized in cython. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;[Python] Align GRPC_ENABLE_FORK_SUPPORT env defaults in core and python (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41455\"\u003e#41455\u003c/a\u003e)\u0026quot;. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41769\"\u003e#41769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Fix AsyncIO Server maximum_concurrent_rpcs enforcement preventing negative active_rpcs count. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41532\"\u003e#41532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Docs: correct \u003ccode\u003egrpc.Compression\u003c/code\u003e references. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41705\"\u003e#41705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Typeguard] Part 4 - Add Typeguard to AIO stack in tests . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40226\"\u003e#40226\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/grpc/grpc/commit/f5e2d6e856176c2f6b7691032adfefe21e5f64c1\"\u003e\u003ccode\u003ef5e2d6e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41857\"\u003e#41857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/938cfecaebfc28b5e6bcdb95d55aba3962d9b55b\"\u003e\u003ccode\u003e938cfec\u003c/code\u003e\u003c/a\u003e [subchannel connection scaling] fix when we reset backoff (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41935\"\u003e#41935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/91778bec667d7310864420f2b32aeb2e41e1b51c\"\u003e\u003ccode\u003e91778be\u003c/code\u003e\u003c/a\u003e [Backport][v1.80.x][Python] New \u003ccode\u003e_create\u003c/code\u003e method for aio.Metadata (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41888\"\u003e#41888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f10b9f26933703c5fe3e080f50ef19c858d773e0\"\u003e\u003ccode\u003ef10b9f2\u003c/code\u003e\u003c/a\u003e [bzlmod] upgrade rules_swift to avoid BCR CI breakage on Windows with bazel 7...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/be4c1c55b69493868241bfffd4bc318d3d592656\"\u003e\u003ccode\u003ebe4c1c5\u003c/code\u003e\u003c/a\u003e [subchannel] fix crash in connection scaling code (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41853\"\u003e#41853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a71df73eafb18fa0210a13dd6a2ce2cb6594d427\"\u003e\u003ccode\u003ea71df73\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0-pre1 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41844\"\u003e#41844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ca09e4818f4362e75c9c224f1d4c2065db75a0a\"\u003e\u003ccode\u003e3ca09e4\u003c/code\u003e\u003c/a\u003e [Python] Fix GRPC_TRACE and add test to check the GRPC_TRACE logs print (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/260c6fd37c502e984836a446c5d90e4a1298036d\"\u003e\u003ccode\u003e260c6fd\u003c/code\u003e\u003c/a\u003e [PHP] Disable php infinite recursion check for callback from Core to PHP (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41\"\u003e#41\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/50957c5c47de1c85637fc9dafe6d4eb4c1224f6b\"\u003e\u003ccode\u003e50957c5\u003c/code\u003e\u003c/a\u003e [Flakiness] Delete flaky iomgr fd_conservation_posix_test and create an Event...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e1e1d0a8150b5178d4b75e15f4856a4d825a8999\"\u003e\u003ccode\u003ee1e1d0a\u003c/code\u003e\u003c/a\u003e [Bzlmod] Turn off bzlmod for PSM python tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41810\"\u003e#41810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.80.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 23.0.0 to 26.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.0.0\u003c/h2\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEventlet worker removed\u003c/strong\u003e: The \u003ccode\u003eeventlet\u003c/code\u003e worker class has been dropped. Migrate to \u003ccode\u003egevent\u003c/code\u003e, \u003ccode\u003egthread\u003c/code\u003e, or \u003ccode\u003etornado\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Framework Compatibility Suite\u003c/strong\u003e: New end-to-end compatibility test harness covering Starlette, FastAPI, Litestar, Quart, Sanic, and BlackSheep. Current grid passes 438/444 tests (98%).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Test Suite Expansion\u003c/strong\u003e: 134 additional ASGI unit tests covering protocol semantics, lifespan, websockets, and chunked framing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/1.1 Request-Target Validation\u003c/strong\u003e (RFC 9112 sections 3.2.3, 3.2.4):\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003eauthority-form\u003c/code\u003e request-target outside \u003ccode\u003eCONNECT\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003easterisk-form\u003c/code\u003e request-target outside \u003ccode\u003eOPTIONS\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003erelative-reference\u003c/code\u003e request-targets\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHeader Field Hardening\u003c/strong\u003e (RFC 9110):\n\u003cul\u003e\n\u003cli\u003eReject control characters in header field-value (section 5.5)\u003c/li\u003e\n\u003cli\u003eReject forbidden trailer field-names (section 6.5.1)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eContent-Length\u003c/code\u003e list form (RFC 9112 section 6.3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRequest Smuggling Hardening\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eTighten keepalive gate and scope \u003ccode\u003efinish_body\u003c/code\u003e byte cap\u003c/li\u003e\n\u003cli\u003eKeep \u003ccode\u003e_body_receiver\u003c/code\u003e alive across the keepalive smuggling gate so pipelined requests cannot re-enter a closed body\u003c/li\u003e\n\u003cli\u003eAddress parser/protocol findings from a six-point WSGI/ASGI audit\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePROXY Protocol (ASGI)\u003c/strong\u003e: Enforce \u003ccode\u003eproxy_allow_ips\u003c/code\u003e and tighten v1/v2 parsing in the ASGI callback parser.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConnection Draining\u003c/strong\u003e: Drain the connection on close per RFC 9112 section 9.6 to prevent reset-on-close truncation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eBody Framing on HEAD/204/304\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eKeep \u003ccode\u003eContent-Length\u003c/code\u003e on HEAD and 304 responses (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3621\"\u003e#3621\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop body framing on HEAD/204/304 even when the framework set it\u003c/li\u003e\n\u003cli\u003eWarn once when an ASGI app emits a body for a no-body response\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 ASGI\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e_handle_stream_ended\u003c/code\u003e to set \u003ccode\u003e_body_complete\u003c/code\u003e in the async HTTP/2 handler so request bodies finalize correctly on stream end\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eInvalidChunkExtension\u003c/code\u003e mapping and fast-parser support in ASGI tests (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3565\"\u003e#3565\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/1.1 100-Continue\u003c/strong\u003e: Stop adding \u003ccode\u003eTransfer-Encoding: chunked\u003c/code\u003e to 100-Continue interim responses.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWebSocket Close Handshake\u003c/strong\u003e (RFC 6455):\n\u003cul\u003e\n\u003cli\u003eComply with the close handshake state machine\u003c/li\u003e\n\u003cli\u003eClose the transport after the close handshake completes\u003c/li\u003e\n\u003cli\u003eFix binary send when the \u003ccode\u003etext\u003c/code\u003e key is \u003ccode\u003eNone\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEarly Hints\u003c/strong\u003e: Validate headers in the \u003ccode\u003eearly_hints\u003c/code\u003e callback to match \u003ccode\u003eprocess_headers\u003c/code\u003e; pass only the header name to \u003ccode\u003eInvalidHeader\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3588\"\u003e#3588\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Framework Fixes\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eFix ASGI disconnect handling for Django-style apps\u003c/li\u003e\n\u003cli\u003eFix Litestar request handling (use raw ASGI receive for body/headers)\u003c/li\u003e\n\u003cli\u003eFix Litestar HTTP endpoints for compatibility tests\u003c/li\u003e\n\u003cli\u003eFix Quart headers endpoint to normalize keys to lowercase\u003c/li\u003e\n\u003cli\u003eFix Quart WebSocket close test app (missing \u003ccode\u003eaccept()\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix duplicate \u003ccode\u003eTransfer-Encoding\u003c/code\u003e header for BlackSheep streaming\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/benoitc/gunicorn/commit/5d819cf36040f6cc6175fcc804d703fb899509dd\"\u003e\u003ccode\u003e5d819cf\u003c/code\u003e\u003c/a\u003e release: 26.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/b45c70df105f7d5dcbc5abfb732804d6464edc21\"\u003e\u003ccode\u003eb45c70d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3611\"\u003e#3611\u003c/a\u003e from zc-mattcen/docs-typo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/99c8d48acf453deb5c49fe12e195dbc00d888d1e\"\u003e\u003ccode\u003e99c8d48\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3623\"\u003e#3623\u003c/a\u003e from benoitc/chore/drop-eventlet-add-h2-uvloop-test-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5a655af50f20e005dd9e32e6078dc82fa45f3d4b\"\u003e\u003ccode\u003e5a655af\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3622\"\u003e#3622\u003c/a\u003e from benoitc/test/docker-port-and-ipv4-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/201df19a8011c0a1d6a0e75ebe22e89d48eb935e\"\u003e\u003ccode\u003e201df19\u003c/code\u003e\u003c/a\u003e chore: remove eventlet worker; add h2 and uvloop to test deps\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/f4ac8e1f1bf1d365e77f41915da55bec31873f84\"\u003e\u003ccode\u003ef4ac8e1\u003c/code\u003e\u003c/a\u003e test: pass action name to dirty client and stabilize after TTOU spam\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/54d38afddf1f0db0c15b5f4ff63f3c7bfad96961\"\u003e\u003ccode\u003e54d38af\u003c/code\u003e\u003c/a\u003e test: unblock docker fixtures on macOS hosts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/68843c8893dd938456f0a2da62085ab5776f8871\"\u003e\u003ccode\u003e68843c8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3621\"\u003e#3621\u003c/a\u003e from benoitc/fix/asgi-preserve-content-length-on-hea...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/31f2618f733cc0c78690df63f4e344aaf3f56b20\"\u003e\u003ccode\u003e31f2618\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3620\"\u003e#3620\u003c/a\u003e from benoitc/fix/asgi-proxy-protocol-trust-and-parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/41ec7527dbd8a9e52728477700707ad40e41d9dc\"\u003e\u003ccode\u003e41ec752\u003c/code\u003e\u003c/a\u003e fix: keep Content-Length on HEAD and 304 responses\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/23.0.0...26.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pika` from 1.3.2 to 1.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pika/pika/releases\"\u003epika's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.4.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pypi.org/project/pika/1.4.0/\"\u003ehttps://pypi.org/project/pika/1.4.0/\u003c/a\u003e | \u003ca href=\"https://github.com/pika/pika/milestone/23?closed=1\"\u003eGitHub milestone\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add python3.10 support and make code python3.7+ by \u003ca href=\"https://github.com/vinitkumar\"\u003e\u003ccode\u003e@​vinitkumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1351\"\u003epika/pika#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in example docstring by \u003ca href=\"https://github.com/kinoute\"\u003e\u003ccode\u003e@​kinoute\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1396\"\u003epika/pika#1396\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixing pika v1.0.0 breaking change (order of parameters) for the `cha… by \u003ca href=\"https://github.com/mprinc\"\u003e\u003ccode\u003e@​mprinc\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1393\"\u003epika/pika#1393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Python 3.11 to various places by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1399\"\u003epika/pika#1399\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation improvements by \u003ca href=\"https://github.com/hcmturner\"\u003e\u003ccode\u003e@​hcmturner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1403\"\u003epika/pika#1403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix typo by \u003ca href=\"https://github.com/khadkarajesh\"\u003e\u003ccode\u003e@​khadkarajesh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1404\"\u003epika/pika#1404\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate example to use python3 syntax by \u003ca href=\"https://github.com/AleksaC\"\u003e\u003ccode\u003e@​AleksaC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1408\"\u003epika/pika#1408\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix exchange type enum type by \u003ca href=\"https://github.com/liortct\"\u003e\u003ccode\u003e@​liortct\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1410\"\u003epika/pika#1410\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd more connections to the adapters by \u003ca href=\"https://github.com/dgoeries\"\u003e\u003ccode\u003e@​dgoeries\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1405\"\u003epika/pika#1405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix typo by \u003ca href=\"https://github.com/uwe\"\u003e\u003ccode\u003e@​uwe\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1414\"\u003epika/pika#1414\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFeature \u003ca href=\"https://redirect.github.com/pika/pika/issues/1363\"\u003e#1363\u003c/a\u003e -- Bump examples python version to 3 by \u003ca href=\"https://github.com/alfawal\"\u003e\u003ccode\u003e@​alfawal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1416\"\u003epika/pika#1416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAttempt to re-enable GeventConnection on Windows by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1417\"\u003epika/pika#1417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd examples of using client_properties to URLParameters and ConnectionParameters by \u003ca href=\"https://github.com/johanrhodin\"\u003e\u003ccode\u003e@​johanrhodin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1436\"\u003epika/pika#1436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMisc Windows CI updates by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1438\"\u003epika/pika#1438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse sys.platform instead of platform.system() by \u003ca href=\"https://github.com/cvijdea-bd\"\u003e\u003ccode\u003e@​cvijdea-bd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1467\"\u003epika/pika#1467\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eList Python 3.12 as supported by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1474\"\u003epika/pika#1474\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShrink the compatibility module and remove Python \u0026lt;3.7 support by \u003ca href=\"https://github.com/alfawal\"\u003e\u003ccode\u003e@​alfawal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1441\"\u003epika/pika#1441\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eexample: Remove unnecessary guard by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1435\"\u003epika/pika#1435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDifferentiate release types by \u003ccode\u003egithub.event.release.prerelease\u003c/code\u003e by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1477\"\u003epika/pika#1477\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebasic_consumer_threaded\u003c/code\u003e example by \u003ca href=\"https://github.com/leogallot\"\u003e\u003ccode\u003e@​leogallot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1507\"\u003epika/pika#1507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd description for the example blocking_consume_recover_multiple_hosts by \u003ca href=\"https://github.com/federicsp\"\u003e\u003ccode\u003e@​federicsp\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1512\"\u003epika/pika#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix tests with Python 3.14, except RuntimeError from asyncio.get_event_loop by \u003ca href=\"https://github.com/hroncok\"\u003e\u003ccode\u003e@​hroncok\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1524\"\u003epika/pika#1524\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate ConnectionParameters doc by \u003ca href=\"https://github.com/ryoung9550\"\u003e\u003ccode\u003e@​ryoung9550\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1494\"\u003epika/pika#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate versions by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1514\"\u003epika/pika#1514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003especify your own consumer_tag when using consume() method of BlockingChannel by \u003ca href=\"https://github.com/ivan-eguidazu\"\u003e\u003ccode\u003e@​ivan-eguidazu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1485\"\u003epika/pika#1485\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremoval of pika.compat.dictkeys() by \u003ca href=\"https://github.com/a-detiste\"\u003e\u003ccode\u003e@​a-detiste\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1492\"\u003epika/pika#1492\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd all public APIs to \u003ccode\u003e__all__\u003c/code\u003e by \u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1476\"\u003epika/pika#1476\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert utcnow() and utcfromtimestamp() by \u003ca href=\"https://github.com/mh21\"\u003e\u003ccode\u003e@​mh21\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1484\"\u003epika/pika#1484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Issue # 1530: advertise exchange_exchange_bindings  by \u003ca href=\"https://github.com/kenliao94\"\u003e\u003ccode\u003e@​kenliao94\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1540\"\u003epika/pika#1540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eJpaluska/add threadsafe publisher example by \u003ca href=\"https://github.com/jpaluska\"\u003e\u003ccode\u003e@​jpaluska\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1546\"\u003epika/pika#1546\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd python 3.14 to CI and drop 3.9 by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1549\"\u003epika/pika#1549\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception by \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1545\"\u003epika/pika#1545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions 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/pika/pika/pull/1552\"\u003epika/pika#1552\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eruff\u003c/code\u003e lint check to CI (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1371\"\u003eGH-1371\u003c/a\u003e) by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1551\"\u003epika/pika#1551\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove dead Code Climate config files by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1553\"\u003epika/pika#1553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Add return value documentation for Channel methods (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e) by \u003ca href=\"https://github.com/suchitd\"\u003e\u003ccode\u003e@​suchitd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1555\"\u003epika/pika#1555\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBlockingIOError\u003c/code\u003e from \u003ccode\u003e_read_interrupt\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003eGH-1314\u003c/a\u003e) by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1554\"\u003epika/pika#1554\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplement tests compatibility patch for RabbitMQ 4.3  by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1548\"\u003epika/pika#1548\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions 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/pika/pika/pull/1557\"\u003epika/pika#1557\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to pytest by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1550\"\u003epika/pika#1550\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix asyncio.get_event_loop() deprecation in _AsyncioIOServicesAdapter by \u003ca href=\"https://github.com/geomarceau\"\u003e\u003ccode\u003e@​geomarceau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1544\"\u003epika/pika#1544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop more Python 2 compatibility code by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1561\"\u003epika/pika#1561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlign Python versions metadata and docs  by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1556\"\u003epika/pika#1556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLegacy file fixes by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1562\"\u003epika/pika#1562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md with AI agent guidelines by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1560\"\u003epika/pika#1560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field table type decoding to match RabbitMQ wire format by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1566\"\u003epika/pika#1566\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/pika/pika/blob/main/CHANGELOG.md\"\u003epika's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/pika/pika/tree/1.4.0\"\u003e1.4.0\u003c/a\u003e (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pika/pika/compare/1.4.0b0...1.4.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eImplemented enhancements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce yapf/google formatting in CI \u003ca href=\"https://redirect.github.com/pika/pika/issues/1558\"\u003e#1558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Hatch dev environment and scripts \u003ca href=\"https://redirect.github.com/pika/pika/pull/1579\"\u003e#1579\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop more Python 2 compatibility code \u003ca href=\"https://redirect.github.com/pika/pika/pull/1561\"\u003e#1561\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eClosed issues:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Hatch scripts to standardize developer commands \u003ca href=\"https://redirect.github.com/pika/pika/issues/1578\"\u003e#1578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix outdated and broken documentation across the project \u003ca href=\"https://redirect.github.com/pika/pika/issues/1568\"\u003e#1568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate Codecov default branch and badge \u003ca href=\"https://redirect.github.com/pika/pika/issues/1563\"\u003e#1563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGitHub actions workflows and test code need updates for RabbitMQ 4.3 \u003ca href=\"https://redirect.github.com/pika/pika/issues/1547\"\u003e#1547\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edatetime.datetime.utcfromtimestamp() is deprecated \u003ca href=\"https://redirect.github.com/pika/pika/issues/1539\"\u003e#1539\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eURLParameters这个类有bug \u003ca href=\"https://redirect.github.com/pika/pika/issues/1533\"\u003e#1533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCustom transport \u003ca href=\"https://redirect.github.com/pika/pika/issues/1532\"\u003e#1532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ex-delay value is being returned in the header as a UINT64 and not a SINT16 \u003ca href=\"https://redirect.github.com/pika/pika/issues/1531\"\u003e#1531\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePika should advertise the \u003ccode\u003eexchange_exchange_bindings\u003c/code\u003e client capability \u003ca href=\"https://redirect.github.com/pika/pika/issues/1530\"\u003e#1530\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMissing type annotations \u003ca href=\"https://redirect.github.com/pika/pika/issues/1523\"\u003e#1523\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThere is no info about return type of queue_declare() method of pika.channel \u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGetting the user who sent the message \u003ca href=\"https://redirect.github.com/pika/pika/issues/1510\"\u003e#1510\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhere is examples/consume_recover_retry.py ? \u003ca href=\"https://redirect.github.com/pika/pika/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType Hint Issue with arguments parameter in queue_declare method of BlockingChannel Class - (expected \u0026quot;DeclareOk | None\u0026quot;  [arg-type]) \u003ca href=\"https://redirect.github.com/pika/pika/issues/1482\"\u003e#1482\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003equeue_declare does not receive the callback at random times \u003ca href=\"https://redirect.github.com/pika/pika/issues/1480\"\u003e#1480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThere is no current event loop in thread \u003ca href=\"https://redirect.github.com/pika/pika/issues/1479\"\u003e#1479\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCannot find reference 'exceptions' in '__init__.pyi'  \u003ca href=\"https://redirect.github.com/pika/pika/issues/1473\"\u003e#1473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert to \u003ccode\u003epytest\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pika/pika/issues/1469\"\u003e#1469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a CI lint check using \u003ccode\u003eruff\u003c/code\u003e and fix all findings \u003ca href=\"https://redirect.github.com/pika/pika/issues/1371\"\u003e#1371\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for proxy configuration (Socks5) \u003ca href=\"https://redirect.github.com/pika/pika/issues/1359\"\u003e#1359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBlockingIOError: [WinError 10035] A non-blocking socket operation could not be completed immediately \u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003e#1314\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMerged pull requests:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate outdated documentation across the pika project \u003ca href=\"https://redirect.github.com/pika/pika/pull/1577\"\u003e#1577\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix TypeError in select_connection \u003ca href=\"https://redirect.github.com/pika/pika/pull/1575\"\u003e#1575\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.7+ in CI and fix \u003ccode\u003etyping_extensions\u003c/code\u003e import \u003ca href=\"https://redirect.github.com/pika/pika/pull/1574\"\u003e#1574\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyapf\u003c/code\u003e formatter enforcement \u003ca href=\"https://redirect.github.com/pika/pika/pull/1573\"\u003e#1573\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ePIKA_TEST_TLS\u003c/code\u003e env with pytest flag \u003ca href=\"https://redirect.github.com/pika/pika/pull/1572\"\u003e#1572\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix field table type decoding to match RabbitMQ wire format \u003ca href=\"https://redirect.github.com/pika/pika/pull/1566\"\u003e#1566\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLegacy file fixes \u003ca href=\"https://redirect.github.com/pika/pika/pull/1562\"\u003e#1562\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md with AI agent guidelines \u003ca href=\"https://redirect.github.com/pika/pika/pull/1560\"\u003e#1560\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 2 updates \u003ca href=\"https://redirect.github.com/pika/pika/pull/1557\"\u003e#1557\u003c/a\u003e (\u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAlign Python versions metadata and docs  \u003ca href=\"https://redirect.github.com/pika/pika/pull/1556\"\u003e#1556\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocs: Add return value documentation for Channel methods (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/pika/pika/pull/1555\"\u003e#1555\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBlockingIOError\u003c/code\u003e from \u003ccode\u003e_read_interrupt\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003eGH-1314\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/pika/pika/pull/1554\"\u003e#1554\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove dead Code Climate config files \u003ca href=\"https://redirect.github.com/pika/pika/pull/1553\"\u003e#1553\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 4 updates \u003ca href=\"https://redirect.github.com/pika/pika/pull/1552\"\u003e#1552\u003c/a\u003e (\u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\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/pika/pika/commit/305fbe60088790a2648580078b4808f138e325d7\"\u003e\u003ccode\u003e305fbe6\u003c/code\u003e\u003c/a\u003e pika 1.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/9a3a6e51d17b2b87b29fb8dc48256e79bfdfea58\"\u003e\u003ccode\u003e9a3a6e5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pika/pika/issues/1577\"\u003e#1577\u003c/a\u003e from pika/doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/f750ce3a60d7a0cb5cf0fcf68ddb68190935b720\"\u003e\u003ccode\u003ef750ce3\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/ccfe924f5e15b5b1c88384135a64d0f9a6254685\"\u003e\u003ccode\u003eccfe924\u003c/code\u003e\u003c/a\u003e Ensure that pip is run the same way in each workflow.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/47129ca63f282a6b2e8335645236a0fa0b27c0ae\"\u003e\u003ccode\u003e47129ca\u003c/code\u003e\u003c/a\u003e Caching pip artifacts actually does not accomplish anything.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/0a721f75c7eda0923a4390e544341a737d6a7815\"\u003e\u003ccode\u003e0a721f7\u003c/code\u003e\u003c/a\u003e Fix copyright year and document \u003ccode\u003elegacy-python.yaml\u003c/code\u003e workflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/f7f51dbd069201a0ff07140cbd3511a36555e398\"\u003e\u003ccode\u003ef7f51db\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/6e6283352e302c8e25dd5151e1a0164901ff8902\"\u003e\u003ccode\u003e6e62833\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pika/pika/issues/1579\"\u003e#1579\u003c/a\u003e from pika/feature/gh-1578-hatch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/3d038ad4cf36708a0e19547e5eaccfdd776ef024\"\u003e\u003ccode\u003e3d038ad\u003c/code\u003e\u003c/a\u003e Remove test-requirements.txt and all references to it, since it is superseded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/540db57e418fa58927cff1a3dd4b8aad123dc4c2\"\u003e\u003ccode\u003e540db57\u003c/code\u003e\u003c/a\u003e Fix formatting issue in legacy-python CI workflow for virtualenv installation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pika/pika/compare/1.3.2...1.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 to 6.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/yaml/pyyaml/releases\"\u003epyyaml's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14 and free-threading (experimental).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\u003ehttps://github.com/yaml/pyyaml/compare/6.0.2...6.0.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/yaml/pyyaml/blob/6.0.3/CHANGES\"\u003epyyaml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e6.0.3 (2025-09-25)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/yaml/pyyaml/pull/864\"\u003eyaml/pyyaml#864\u003c/a\u003e -- Support for Python 3.14 and free-threading (experimental)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/49790e73684bebad1df05ef8d828fa12f685bffb\"\u003e\u003ccode\u003e49790e7\u003c/code\u003e\u003c/a\u003e Release 6.0.3 (\u003ca href=\"https://redirect.github.com/yaml/pyyaml/issues/889\"\u003e#889\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.0 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.0...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.5.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eHuge release! There's plenty of important little bug fixes and new features, but the headliner is definitely the improved ergonomics of \u003ccode\u003estructlog.dev.ConsoleRenderer\u003c/code\u003e. We have finally accepted that local development has different priorities than production and made it both mutable (with automatic re-configuration) and also easily retrievable (\u003ccode\u003ecr = ConsoleRenderer.get_active()\u003c/code\u003e). This allows you, for example, to disable Rich exception formatting as easily as \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active().exception_formatter = structlog.dev.plain_traceback\u003c/code\u003e. Please check out the \u003ca href=\"https://www.structlog.org/en/stable/console-output.html\"\u003eupdated docs\u003c/a\u003e!\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://www.thanks.dev\"\u003ethanks.dev\u003c/a\u003e (@\u003ca href=\"https://github.com/thnxdev\"\u003ethnxdev\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=\"https://quesma.com/\"\u003eQuesma\u003c/a\u003e (\u003ca href=\"https://github.com/QuesmaOrg\"\u003e\u003ccode\u003e@​QuesmaOrg\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://gi...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/census31-eq-questionnaire-runner/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Fcensus31-eq-questionnaire-runner/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"},{"uuid":"4474185928","node_id":"PR_kwDOLsrafc7c579l","number":18,"state":"closed","title":"deps(py): bump the python-minor group across 1 directory with 44 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-25T23:52:53.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-19T03:33:35.000Z","updated_at":"2026-05-25T23:52:55.000Z","time_to_close":591558,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(py): bump","group_name":"python-minor","update_count":44,"packages":[{"name":"anyio","old_version":"4.12.1","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"cachetools","old_version":"7.0.4","new_version":"7.1.3","repository_url":"https://github.com/tkem/cachetools"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"choreographer","old_version":"1.2.1","new_version":"1.3.0","repository_url":"https://github.com/plotly/choreographer"},{"name":"click","old_version":"8.3.1","new_version":"8.4.0","repository_url":"https://github.com/pallets/click"},{"name":"decorator","old_version":"5.2.1","new_version":"5.3.1","repository_url":"https://github.com/micheles/decorator"},{"name":"duckdb","old_version":"1.5.0","new_version":"1.5.2","repository_url":"https://github.com/duckdb/duckdb-python"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.0","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.11","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.11.0","new_version":"9.13.0","repository_url":"https://github.com/ipython/ipython"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"kaleido","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/plotly/kaleido"},{"name":"llvmlite","old_version":"0.46.0b1","new_version":"0.47.0","repository_url":"https://github.com/numba/llvmlite"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"matplotlib-inline","old_version":"0.2.1","new_version":"0.2.2","repository_url":"https://github.com/ipython/matplotlib-inline"},{"name":"mcp","old_version":"1.26.0","new_version":"1.27.1","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"py-vollib","old_version":"1.0.1","new_version":"1.0.7","repository_url":"https://github.com/vollib/py_vollib"},{"name":"narwhals","old_version":"2.18.0","new_version":"2.21.2","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"numba","old_version":"0.64.0","new_version":"0.65.1","repository_url":"https://github.com/numba/numba"},{"name":"numpy","old_version":"2.4.3","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"openalgo","old_version":"1.0.46","new_version":"1.0.50","repository_url":"https://github.com/openalgo/openalgo-python"},{"name":"orjson","old_version":"3.11.7","new_version":"3.11.9","repository_url":"https://github.com/ijl/orjson"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"pillow","old_version":"12.1.1","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.9.4","new_version":"4.9.6","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"plotly","old_version":"6.6.0","new_version":"6.7.0","repository_url":"https://github.com/plotly/plotly.py"},{"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.46.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"python-multipart","old_version":"0.0.22","new_version":"0.0.29","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"python-telegram-bot","old_version":"22.6","new_version":"22.7","repository_url":"https://github.com/python-telegram-bot/python-telegram-bot"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"sqlalchemy","old_version":"2.0.48","new_version":"2.0.49","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"traitlets","old_version":"5.14.3","new_version":"5.15.0","repository_url":"https://github.com/ipython/traitlets"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.42.0","new_version":"0.47.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.7.0","repository_url":"https://github.com/jquast/wcwidth"},{"name":"werkzeug","old_version":"3.1.6","new_version":"3.1.8","repository_url":"https://github.com/pallets/werkzeug"},{"name":"wheel","old_version":"0.46.3","new_version":"0.47.0","repository_url":"https://github.com/pypa/wheel"},{"name":"wtforms","old_version":"3.2.1","new_version":"3.2.2","repository_url":"https://github.com/pallets-eco/wtforms"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 44 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.12.1` | `4.13.0` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.4` | `7.1.3` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.6` | `3.4.7` |\n| [choreographer](https://github.com/plotly/choreographer) | `1.2.1` | `1.3.0` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.4.0` |\n| [decorator](https://github.com/micheles/decorator) | `5.2.1` | `5.3.1` |\n| [duckdb](https://github.com/duckdb/duckdb-python) | `1.5.0` | `1.5.2` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.15` |\n| [ipython](https://github.com/ipython/ipython) | `9.11.0` | `9.13.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [kaleido](https://github.com/plotly/kaleido) | `1.2.0` | `1.3.0` |\n| [llvmlite](https://github.com/numba/llvmlite) | `0.46.0b1` | `0.47.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [matplotlib-inline](https://github.com/ipython/matplotlib-inline) | `0.2.1` | `0.2.2` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.26.0` | `1.27.1` |\n| [py-vollib](https://github.com/vollib/py_vollib) | `1.0.1` | `1.0.7` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.18.0` | `2.21.2` |\n| [numba](https://github.com/numba/numba) | `0.64.0` | `0.65.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.3` | `2.4.6` |\n| [openalgo](https://github.com/openalgo/openalgo-python) | `1.0.46` | `1.0.50` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.7` | `3.11.9` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.1.1` | `12.2.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.4` | `4.9.6` |\n| [plotly](https://github.com/plotly/plotly.py) | `6.6.0` | `6.7.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.46.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.1` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.0.3` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.22` | `0.0.29` |\n| [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) | `22.6` | `22.7` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.48` | `2.0.49` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14.3` | `5.15.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.42.0` | `0.47.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.7.0` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.6` | `3.1.8` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.47.0` |\n| [wtforms](https://github.com/pallets-eco/wtforms) | `3.2.1` | `3.2.2` |\n\n\nUpdates `anyio` from 4.12.1 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\u003c/blockquote\u003e\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.12.1...4.13.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.4 to 7.1.3\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.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\u003ch1\u003ev7.0.5 (2026-03-09)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMinor \u003ccode\u003e@cachedmethod\u003c/code\u003e performance 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/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\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/ed107816b6787d74f21684f6614d4fbbbbb935de\"\u003e\u003ccode\u003eed10781\u003c/code\u003e\u003c/a\u003e Update Copilot instructions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/c624ceb350d50bb733ccaa706613495999b9479f\"\u003e\u003ccode\u003ec624ceb\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/395\"\u003e#395\u003c/a\u003e: Document FIFOCache update behavior.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/1ddec068633641895b6926dcea27276d5149c038\"\u003e\u003ccode\u003e1ddec06\u003c/code\u003e\u003c/a\u003e Fix/396 (\u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/b91818c46624b3be3f4b321426061ba50c08a30e\"\u003e\u003ccode\u003eb91818c\u003c/code\u003e\u003c/a\u003e Drop MANIFEST.in.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.0.4...v7.1.3\"\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 `choreographer` from 1.2.1 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/choreographer/blob/main/CHANGELOG.txt\"\u003echoreographer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ev1.3.0\nv1.3.0rc2\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCheck path validity for browser with is_file()\u003c/li\u003e\n\u003cli\u003eAdd option --verify_local in choreo_diagnose and fix local reporting logic\nv1.3.0rc1\u003c/li\u003e\n\u003cli\u003eWe now look for old download path as well as new download path\nv1.3.0rc0\u003c/li\u003e\n\u003cli\u003eChange to process group for better killing of multi-process chrome\u003c/li\u003e\n\u003cli\u003eAdd argument to Session/Target \u003ccode\u003esend_command(..., *, with_perf: bool)\u003c/code\u003e to\nreturn timing information about browser write/read.\u003c/li\u003e\n\u003cli\u003eUpdate default chrome from 135.0.7011.0/1418433 to 144.0.7527.0/1544685\u003c/li\u003e\n\u003cli\u003eFix: New chrome takes longer/doesn't populate targets right away, so add a\nretry loop to populate targets\u003c/li\u003e\n\u003cli\u003eAlter \u003ccode\u003eget_chrome\u003c/code\u003e verbose to print whole JSON\u003c/li\u003e\n\u003cli\u003eChange chrome download path to use XDG cache dir\u003c/li\u003e\n\u003cli\u003eDon't download chrome if we already have that version: add force argument\u003c/li\u003e\n\u003cli\u003eRemove unused system inspection code\u003c/li\u003e\n\u003cli\u003eAdd a set of helper functions to await for tab loading and send javascript\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/choreographer/commit/92147b1ccf024ae647f29ebf43057564011e06c9\"\u003e\u003ccode\u003e92147b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/296\"\u003e#296\u003c/a\u003e from plotly/cam/update-changelog-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/8851fc919bc7dfb27a48541543f1ff195c48eda3\"\u003e\u003ccode\u003e8851fc9\u003c/code\u003e\u003c/a\u003e Updates to release version v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/3128bddf909381a2b4205f0e28c0c3cb8b13498c\"\u003e\u003ccode\u003e3128bdd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/288\"\u003e#288\u003c/a\u003e from plotly/andrew/more_local_logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/a6f478e00fb81ad22db7c7c1d31028fb4ab20311\"\u003e\u003ccode\u003ea6f478e\u003c/code\u003e\u003c/a\u003e Add to changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/953e19ad5dc395a3554cfbaf25599a8a3db6d933\"\u003e\u003ccode\u003e953e19a\u003c/code\u003e\u003c/a\u003e Check browser is file whwen checking path validity\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/d062e355b819b84e57060d4e48fbe2aa6f063259\"\u003e\u003ccode\u003ed062e35\u003c/code\u003e\u003c/a\u003e Change default setting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c0c97fc64a55c773dd7484674996cf55d74249a1\"\u003e\u003ccode\u003ec0c97fc\u003c/code\u003e\u003c/a\u003e Add option to verify local with choreo_diagnose\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/7ade1922269a6999c06f2ff92b34a1770bba6d3e\"\u003e\u003ccode\u003e7ade192\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/286\"\u003e#286\u003c/a\u003e from plotly/andrew/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/edf284c8973dd9dc7f7b2f77a53481fe6f0d2671\"\u003e\u003ccode\u003eedf284c\u003c/code\u003e\u003c/a\u003e Update Roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c1b7abce535feb79748c888ba1130b985c13eb3f\"\u003e\u003ccode\u003ec1b7abc\u003c/code\u003e\u003c/a\u003e Changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/choreographer/compare/v1.2.1...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.0/\"\u003ehttps://pypi.org/project/click/8.4.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParamType\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3371\"\u003e#3371\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3372\"\u003e#3372\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParameter\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2805\"\u003e#2805\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e is now an abstract base class, making explicit\nthat it cannot be instantiated directly.\u003c/li\u003e\n\u003cli\u003e:attr:\u003ccode\u003eParameter.name\u003c/code\u003e is now \u003ccode\u003estr\u003c/code\u003e instead of \u003ccode\u003estr | None\u003c/code\u003e.\nWhen \u003ccode\u003eexpose_value=False\u003c/code\u003e, the name is set to \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e instead\nof \u003ccode\u003eNone\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ectx\u003c/code\u003e parameter of :meth:\u003ccode\u003eParameter.get_error_hint\u003c/code\u003e is now\ntyped as \u003ccode\u003eContext | None\u003c/code\u003e, matching the runtime behavior.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSplit string values from \u003ccode\u003edefault_map\u003c/code\u003e for parameters with \u003ccode\u003enargs \u0026gt; 1\u003c/code\u003e\nor :class:\u003ccode\u003eTuple\u003c/code\u003e type, matching environment variable behavior.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2745\"\u003e#2745\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3364\"\u003e#3364\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAuto-detect \u003ccode\u003etype=UNPROCESSED\u003c/code\u003e for \u003ccode\u003eflag_value\u003c/code\u003e of non-basic types\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2012\"\u003e#2012\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3363\"\u003e#3363\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe error hint now uses \u003ccode\u003eCommand.get_help_option_names\u003c/code\u003e to pick\nnon-shadowed help option names, so \u003ccode\u003eTry '... -h'\u003c/code\u003e no longer points to a\nsubcommand option that shadows \u003ccode\u003e-h\u003c/code\u003e. All surviving names are shown\n(\u003ccode\u003e-h/--help\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/pallets/click/issues/2790\"\u003e#2790\u003c/a\u003e  \u003ca href=\"https://redirect.github.com/pallets/click/issues/3208\"\u003e#3208\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix readline functionality on non-Windows platforms. Prompt text is now\npassed directly to readline instead of being printed separately, allowing\nproper backspace, line editing, and line wrapping behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2968\"\u003e#2968\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-17\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e typing improvements. :pr:\u003ccode\u003e3371\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n:pr:\u003ccode\u003e3372\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e typing improvements. :pr:\u003ccode\u003e2805\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e is now an abstract base class, making explicit\nthat it cannot be instantiated directly.\u003c/li\u003e\n\u003cli\u003e:attr:\u003ccode\u003eParameter.name\u003c/code\u003e is now \u003ccode\u003estr\u003c/code\u003e instead of \u003ccode\u003estr | None\u003c/code\u003e.\nWhen \u003ccode\u003eexpose_value=False\u003c/code\u003e, the name is set to \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e instead\nof \u003ccode\u003eNone\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ectx\u003c/code\u003e parameter of :meth:\u003ccode\u003eParameter.get_error_hint\u003c/code\u003e is now\ntyped as \u003ccode\u003eContext | None\u003c/code\u003e, matching the runtime behavior.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSplit string values from \u003ccode\u003edefault_map\u003c/code\u003e for parameters with \u003ccode\u003enargs \u0026gt; 1\u003c/code\u003e\nor :class:\u003ccode\u003eTuple\u003c/code\u003e type, matching environment variable behavior.\n:issue:\u003ccode\u003e2745\u003c/code\u003e :pr:\u003ccode\u003e3364\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAuto-detect \u003ccode\u003etype=UNPROCESSED\u003c/code\u003e for \u003ccode\u003eflag_value\u003c/code\u003e of non-basic types\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe error hint now uses :meth:\u003ccode\u003eCommand.get_help_option_names\u003c/code\u003e to pick\nnon-shadowed help option names, so \u003ccode\u003eTry '... -h'\u003c/code\u003e no longer points to a\nsubcommand option that shadows \u003ccode\u003e-h\u003c/code\u003e. All surviving names are shown\n(\u003ccode\u003e-h/--help\u003c/code\u003e). :issue:\u003ccode\u003e2790\u003c/code\u003e :pr:\u003ccode\u003e3208\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix readline functionality on non-Windows platforms. Prompt text is now\npassed directly to readline instead of being printed separately, allowing\nproper backspace, line editing, and line wrapping behavior. :issue:\u003ccode\u003e2968\u003c/code\u003e\n:pr:\u003ccode\u003e2969\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse :func:\u003ccode\u003eos.startfile\u003c/code\u003e on Windows to open URLs in :func:\u003ccode\u003eopen_url\u003c/code\u003e,\nreplacing the \u003ccode\u003estart\u003c/code\u003e built-in which cannot be invoked without\n\u003ccode\u003eshell=True\u003c/code\u003e. :issue:\u003ccode\u003e3164\u003c/code\u003e :pr:\u003ccode\u003e3186\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix Fish shell completion errors when option help text contains newlines.\n:issue:\u003ccode\u003e3043\u003c/code\u003e :pr:\u003ccode\u003e3126\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/41f410fb7528305d7e87c8cfa704f6c2456f57fc\"\u003e\u003ccode\u003e41f410f\u003c/code\u003e\u003c/a\u003e Release 8.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/e3e69e3bf8d749ac1a632f2ece4d38ec7f6588f5\"\u003e\u003ccode\u003ee3e69e3\u003c/code\u003e\u003c/a\u003e Add type annotations for instance attributes in \u003ccode\u003eutils\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3422\"\u003e#3422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/3bb230dcd5d751f8605b46e9df5a541639d5fd4e\"\u003e\u003ccode\u003e3bb230d\u003c/code\u003e\u003c/a\u003e WIP: Fix \u003ccode\u003eHelpFormatter.write_usage\u003c/code\u003e producing spurious characters (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/63274a79d08fdc5c19220696144489f7144a8547\"\u003e\u003ccode\u003e63274a7\u003c/code\u003e\u003c/a\u003e \u003ccode\u003eclick.get_pager_file\u003c/code\u003e: add tests (\u003ca href=\"https://redirect.github.com/pallets/click/issues/1572\"\u003e#1572\u003c/a\u003e followup) (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3405\"\u003e#3405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/0551bf53588ae87f462d336f24f853a156fefe3a\"\u003e\u003ccode\u003e0551bf5\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eHelpFormatter.write_usage\u003c/code\u003e producing spurious characters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/fc41aa1d0b62494eb93e92ff3929601221e3abf4\"\u003e\u003ccode\u003efc41aa1\u003c/code\u003e\u003c/a\u003e Apply class-body annotations to \u003ccode\u003eKeepOpenFile\u003c/code\u003e for consistency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b761eda3bad977ec2f485451d85fd8ec365f0bf4\"\u003e\u003ccode\u003eb761eda\u003c/code\u003e\u003c/a\u003e Skip some tests on Windows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/98302ac4f49e443a48abd3fbb95c86202b89547d\"\u003e\u003ccode\u003e98302ac\u003c/code\u003e\u003c/a\u003e Check \u003ccode\u003ePAGER\u003c/code\u003e usage, color preservation and edge-cases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/dbdae170879d460e78963f8af35c5cb9c5b86e89\"\u003e\u003ccode\u003edbdae17\u003c/code\u003e\u003c/a\u003e Fix documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1aa2d53d63ff68bf14b35931177aac9270e39713\"\u003e\u003ccode\u003e1aa2d53\u003c/code\u003e\u003c/a\u003e Redesigned tests and get_pager_file branching to be more clear and not set color\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.1...8.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `decorator` from 5.2.1 to 5.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/micheles/decorator/blob/master/CHANGES.md\"\u003edecorator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.3.1 (2026-05-18)\u003c/h2\u003e\n\u003cp\u003eAdded license SPDX identifier to pyproject.toml (reported by\nChristian Lackas).\u003c/p\u003e\n\u003ch2\u003e5.3.0 (2026-05-17)\u003c/h2\u003e\n\u003cp\u003eAdded official support for Python 3.14 (thanks to Hugo van Kemenade,\nDavid Cain and the GitHub user bersbersbers).\nFixed a bug with \u0026quot;return await\u0026quot; contributed by Kadir Can Ozden.\nMoved decorator.py to a package structure (\u003ccode\u003edecorator/__init__.py\u003c/code\u003e) and\nadded a stub file (\u003ccode\u003edecorator/__init__.pyi\u003c/code\u003e) contributed by Marco Gorelli.\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/micheles/decorator/commit/426e9e35d563ffe356e54bd0f970d153b8f25370\"\u003e\u003ccode\u003e426e9e3\u003c/code\u003e\u003c/a\u003e Bumped the version to 5.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/062ff0e0c33733f2148a5590d118a8570df846d5\"\u003e\u003ccode\u003e062ff0e\u003c/code\u003e\u003c/a\u003e Fixed the dependency on setuptools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/086ff5d95d4dc550117c12647a4427d70bf8833d\"\u003e\u003ccode\u003e086ff5d\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/5807a83ead31f0de5303fa950ddea49d850d7355\"\u003e\u003ccode\u003e5807a83\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/093aced11439251e496b47a9a9369501075e8d1a\"\u003e\u003ccode\u003e093aced\u003c/code\u003e\u003c/a\u003e Updated changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/e9ced7e63ad9502b3e2a3e3db5f5f1ccc16c5fd6\"\u003e\u003ccode\u003ee9ced7e\u003c/code\u003e\u003c/a\u003e Added license SPDX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/b3e82ddc04e8d0c18c51eecb30b4a59aee5aac1d\"\u003e\u003ccode\u003eb3e82dd\u003c/code\u003e\u003c/a\u003e Fixed CHANGES.md [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/f1ce8da8522193421436c368849afe886666b4e5\"\u003e\u003ccode\u003ef1ce8da\u003c/code\u003e\u003c/a\u003e Doc fix [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/c924d7c6aa2e47a0627706c385101ff8d558d091\"\u003e\u003ccode\u003ec924d7c\u003c/code\u003e\u003c/a\u003e Updated supported versions [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/8b83e8cca35f5c773654ce4ae89b4e3f84f430d3\"\u003e\u003ccode\u003e8b83e8c\u003c/code\u003e\u003c/a\u003e Fixed CHANGES [ci skip]\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/micheles/decorator/compare/5.2.1...5.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `duckdb` from 1.5.0 to 1.5.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/duckdb/duckdb-python/releases\"\u003educkdb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.2 Bugfix Release\u003c/h2\u003e\n\u003cp\u003eSee the DuckDB core release notes here: \u003ca href=\"https://github.com/duckdb/duckdb/releases/tag/v1.5.2\"\u003ehttps://github.com/duckdb/duckdb/releases/tag/v1.5.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed in duckdb-python\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eType hints overhaul by \u003ca href=\"https://github.com/OutSquareCapital\"\u003e\u003ccode\u003e@​OutSquareCapital\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/352\"\u003educkdb/duckdb-python#352\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache arrow schema for streaming types by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/423\"\u003educkdb/duckdb-python#423\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix segfault on join with None by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/422\"\u003educkdb/duckdb-python#422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix stubs for path_or_buffer param by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/425\"\u003educkdb/duckdb-python#425\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.1 Bugfix Release\u003c/h2\u003e\n\u003cp\u003eDuckDB core v1.5.1 Changelog: \u003ca href=\"https://github.com/duckdb/duckdb/compare/v1.5.0...v1.5.1\"\u003ehttps://github.com/duckdb/duckdb/compare/v1.5.0...v1.5.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRe-added basic support for the GEOMETRY type\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/2aea44eeae35b9c77dc2ff672634034a75c9bb16\"\u003e\u003ccode\u003e2aea44e\u003c/code\u003e\u003c/a\u003e pin submodule at release hash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/3aa2bf2022b91dc9a96c3f91c8bb1fb0296586ef\"\u003e\u003ccode\u003e3aa2bf2\u003c/code\u003e\u003c/a\u003e Fix stubs for path_or_buffer param (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/018fe057d5a003355deb4213a894af559a947aa7\"\u003e\u003ccode\u003e018fe05\u003c/code\u003e\u003c/a\u003e Fix stubs for path_or_buffer param\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/0ef05d69fc8a123cf532f3ffb3e088212bbbfaf7\"\u003e\u003ccode\u003e0ef05d6\u003c/code\u003e\u003c/a\u003e Fix segfault on join with None (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/422\"\u003e#422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/4acb9f71e00c5002d3ab3aba78a172df8f7ebbc4\"\u003e\u003ccode\u003e4acb9f7\u003c/code\u003e\u003c/a\u003e Fix segfault on join\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/6f161de62403c209633fcbd52c6c0403dadef7da\"\u003e\u003ccode\u003e6f161de\u003c/code\u003e\u003c/a\u003e Cache arrow schema for streaming types (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/423\"\u003e#423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/87d6a319674c5e2fb855e140bf539e997e978a2e\"\u003e\u003ccode\u003e87d6a31\u003c/code\u003e\u003c/a\u003e Add CLAUDE.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/ae356cb03926372b9cd3736f39662efd25bb4915\"\u003e\u003ccode\u003eae356cb\u003c/code\u003e\u003c/a\u003e Cache the arrow schema for streams so we don't need an active client context\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/b71639f215d29c4f8b1c53cb3d7cf45603f4c5d2\"\u003e\u003ccode\u003eb71639f\u003c/code\u003e\u003c/a\u003e Test that client context stays open on arrow streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/305d11457efd4ca0767cad0868b16310b04160a7\"\u003e\u003ccode\u003e305d114\u003c/code\u003e\u003c/a\u003e fix spark test (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/421\"\u003e#421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.5.0...v1.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\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-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.5.0\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.0 (2026-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the \u003ccode\u003eatexit\u003c/code\u003e callback. This callback caused greenlet APIs\nto become unavailable far too soon during interpreter shutdown. Now\nthey remain available while all \u003ccode\u003eatexit\u003c/code\u003e callbacks run. Sometime\nafter \u003ccode\u003ePy_IsFinalizing\u003c/code\u003e becomes true, they may begin misbehaving.\nBecause the order in which C extensions are finalized is undefined,\nC extensions that are sensitive to this need to check the results of\nthat function before invoking greenlet APIs. As a convenience,\n\u003ccode\u003ePyGreenlet_GetCurrent\u003c/code\u003e sets an exception and returns \u003ccode\u003eNULL\u003c/code\u003e\nwhen this happens (and \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e begins returning\n\u003ccode\u003eNone\u003c/code\u003e); other greenlet C API functions have undefined behaviour.\nMethods invoked directly on pre-existing \u003ccode\u003egreenlet.greenlet\u003c/code\u003e\nobjects will continue to function at least until the greenlet C\nextension has been garbage collected and finalized.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 508 \u0026lt;https://github.com/python-greenlet/greenlet/pull/508\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\ntheoretically could have been crashing bugs, but typically only in\nvery rare circumstances.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 502 \u0026lt;https://github.com/python-greenlet/greenlet/pull/502\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix several race conditions that could arise in free-threaded\nbuilds when using greenlet objects from multiple threads, some of\nwhich could lead to assertion failures or interpreter crashes.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eissue 503 \u0026lt;https://github.com/python-greenlet/greenlet/issues/503\u0026gt;\u003c/code\u003e_, with\nthanks to Nitay Dariel and Daniel Diniz.\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/python-greenlet/greenlet/commit/c7acc72000572811d6462ebe01733a974f194990\"\u003e\u003ccode\u003ec7acc72\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/d08f99bf40801c5d57af6e13631c0ba68300ecf7\"\u003e\u003ccode\u003ed08f99b\u003c/code\u003e\u003c/a\u003e CHANGES: Update link from \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/507\"\u003e#507\u003c/a\u003e to more full description in \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/fd3391e33cedc7a17a86059f18dfbec2b3a320bd\"\u003e\u003ccode\u003efd3391e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e from python-greenlet/issue507-remove-atexit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/004e1e9bd5c0fa49c66b733c28ec92a3cd41fe09\"\u003e\u003ccode\u003e004e1e9\u003c/code\u003e\u003c/a\u003e Remove the atexit callback.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/b784a69a0da6abd6e66b15a2c1415d272fdd1292\"\u003e\u003ccode\u003eb784a69\u003c/code\u003e\u003c/a\u003e Back to development: 3.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/df6734edbef6a0e54ecc4ba4735d93ae6d721095\"\u003e\u003ccode\u003edf6734e\u003c/code\u003e\u003c/a\u003e Preparing release 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/0f860756608b767b2ed70f935053b319d1a1b828\"\u003e\u003ccode\u003e0f86075\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/504\"\u003e#504\u003c/a\u003e from python-greenlet/freethreading-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/459657482f3efaee294edff672bde45ac3fac208\"\u003e\u003ccode\u003e4596574\u003c/code\u003e\u003c/a\u003e TLBC: crash appears to still happen on CI 3.14t ubuntu. Re-enable workaround.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/2f4a1cf53fa282ab28ea4815164a9cb09b9320ce\"\u003e\u003ccode\u003e2f4a1cf\u003c/code\u003e\u003c/a\u003e Make green_switch (python level greenlet.switch) and green_throw check for (p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/a0c2a2a7519985d5fe2c034a54f1a0fed82a5905\"\u003e\u003ccode\u003ea0c2a2a\u003c/code\u003e\u003c/a\u003e Fix unused variable warning when asserts are disabled.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.15\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.md\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.15 (2026-05-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce DNS-length cap on individual labels early in \u003ccode\u003echeck_label\u003c/code\u003e,\nshort-circuiting contextual-rule processing for oversized input\nwhile staying compatible with UTS 46 usage.\u003c/li\u003e\n\u003cli\u003eTidy core helpers: hoist bidi category sets to module-level\nfrozensets (avoiding per-codepoint list construction), simplify\nlength checks, and reuse the shared \u003ccode\u003e_unicode_dots_re\u003c/code\u003e from\n\u003ccode\u003eidna.core\u003c/code\u003e in the codec module.\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eraise ... from err\u003c/code\u003e for proper exception chaining and\nswitch internal string formatting to f-strings.\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eflit_core\u003c/code\u003e 4.x in the build backend.\u003c/li\u003e\n\u003cli\u003eExpand the ruff lint set (flake8-bugbear, flake8-simplify,\npyupgrade, perflint) and apply the surfaced fixes; pin lint CI\nto Python 3.14.\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration for GitHub Actions.\u003c/li\u003e\n\u003cli\u003eConvert README and HISTORY from reStructuredText to Markdown.\u003c/li\u003e\n\u003cli\u003eReference CVE-2026-45409 for the 3.14 advisory in place of the\ninitial GHSA identifier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Felix Yan, Stan Ulbrych, and metsw24-max for\ncontributions to this release.\u003c/p\u003e\n\u003ch2\u003e3.14 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved opportunity to process long inputs into quadratic\ntime by rejecting oversize inputs up-front. Closes a bypass\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003ch2\u003e3.13 (2026-04-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12 (2026-04-21)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/af30a092e158181d0b35ac66dfa813788126bdd8\"\u003e\u003ccode\u003eaf30a09\u003c/code\u003e\u003c/a\u003e Release 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/30314d4628744ca14cf2b5820564e5127a9f86f2\"\u003e\u003ccode\u003e30314d4\u003c/code\u003e\u003c/a\u003e Pre-release 3.15rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/05d4b219aa9eddc47371fcbd2000f0301016f3e9\"\u003e\u003ccode\u003e05d4b21\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/237\"\u003e#237\u003c/a\u003e from kjd/convert-docs-to-markdown\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2987fdba1962bbb2358399e0084ba062b98a0bee\"\u003e\u003ccode\u003e2987fdb\u003c/code\u003e\u003c/a\u003e Convert README and HISTORY from reStructuredText to Markdown\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/59fa8002d514bf4a5ce7b58f67b9ec587d53fa9c\"\u003e\u003ccode\u003e59fa800\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/236\"\u003e#236\u003c/a\u003e from kjd/dependabot/github_actions/actions-f3e34333ea\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/def69834ced5d4b3c50439d8b99c4c856ec19ca2\"\u003e\u003ccode\u003edef6983\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into dependabot/github_actions/actions-f3e34333ea\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/bbd8004a797185d8c56bb555cd5c88fde05e0631\"\u003e\u003ccode\u003ebbd8004\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/234\"\u003e#234\u003c/a\u003e from StanFromIreland/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/edd07c05024344a6ccb517414ccb36683aee99fc\"\u003e\u003ccode\u003eedd07c0\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.35.2 to 4.35.2 in the actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5557db030c11bdec50d62aa5f631d705d33ba123\"\u003e\u003ccode\u003e5557db0\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f11746cf4981d25123ef7830d3ee60f07de8ae3d\"\u003e\u003ccode\u003ef11746c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/235\"\u003e#235\u003c/a\u003e from StanFromIreland/patch-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.15\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 9.11.0 to 9.13.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/7c1654dcb4bc0d4c841fbee1f5abf7c6c6007111\"\u003e\u003ccode\u003e7c1654d\u003c/code\u003e\u003c/a\u003e release 9.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d7cd8a44234ddbdba782a42fce7893a4ff4529f4\"\u003e\u003ccode\u003ed7cd8a4\u003c/code\u003e\u003c/a\u003e Fix reStructuredText heading underline consistency in whatsnew (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15189\"\u003e#15189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/6542c95bef054c7ed4c1725047726b7140fe0e4d\"\u003e\u003ccode\u003e6542c95\u003c/code\u003e\u003c/a\u003e Fix RST header levels in whatsnew/version9.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0ca3e92249fb0af429b40e4827000955d5ceeeb3\"\u003e\u003ccode\u003e0ca3e92\u003c/code\u003e\u003c/a\u003e Prepare release notes for 9.13 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15188\"\u003e#15188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/9c8ce1184eceb865d392b39030d6c670caea89c5\"\u003e\u003ccode\u003e9c8ce11\u003c/code\u003e\u003c/a\u003e Revert release.py change, keep as dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/1fb2f7dc221e9b889d857b79c38704eab594d4c0\"\u003e\u003ccode\u003e1fb2f7d\u003c/code\u003e\u003c/a\u003e Prepare release notes for 9.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/be4179d1ba8b5c4e0f0d35a7d2f1654fd15c96e3\"\u003e\u003ccode\u003ebe4179d\u003c/code\u003e\u003c/a\u003e Implement support for image/png format in terminal (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15184\"\u003e#15184\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/1ec6bc9ca9558877b5bfccf66c22e8e61ceba83d\"\u003e\u003ccode\u003e1ec6bc9\u003c/code\u003e\u003c/a\u003e Implement support for image/png format in terminal\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/c6f48bceeec68b6ad9b9e6270eee9a7f4277b245\"\u003e\u003ccode\u003ec6f48bc\u003c/code\u003e\u003c/a\u003e solves \u003ca href=\"https://redirect.github.com/ipython/ipython/issues/14901\"\u003e#14901\u003c/a\u003e illegible yellow string on yellow background issue (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15156\"\u003e#15156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/8635f71fc551d76f017ad47c826bb7c7bfcb6b24\"\u003e\u003ccode\u003e8635f71\u003c/code\u003e\u003c/a\u003e fix: CapturedIO.\u003cstrong\u003einit\u003c/strong\u003e type annotations to accept Optional[StringIO] (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15172\"\u003e#15172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/9.11.0...9.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jedi` from 0.19.2 to 0.20.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.20.0 (2026-05-02)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.14 support\u003c/li\u003e\n\u003cli\u003eRemoved support for Python 3.8 and 3.9\u003c/li\u003e\n\u003cli\u003eUpgraded Typeshed\u003c/li\u003e\n\u003cli\u003eBetter support for Final/ClassVar\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__new__\u003c/code\u003e is now also recognized as a signature and TypeVar inference\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eSelf\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eTypeAlias\u003c/code\u003e, generics for \u003ccode\u003etype[...]\u003c/code\u003e and \u003ccode\u003etuple[...]\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/davidhalter/jedi/commit/3102215478fe07b965dcd8221c17436d1dd7e8ac\"\u003e\u003ccode\u003e3102215\u003c/code\u003e\u003c/a\u003e Move the type parameter syntax tests so that it works for all versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/1b37f2eb946e825cbc2887c6dd34ee046f0ae68c\"\u003e\u003ccode\u003e1b37f2e\u003c/code\u003e\u003c/a\u003e Prepare for the 0.20.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8e4df5cc0ec511db1af6d358182b1fb7c1e0cbff\"\u003e\u003ccode\u003e8e4df5c\u003c/code\u003e\u003c/a\u003e Make sure the new generic syntax does not fail with latest parso\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4c9dbcca0329454b638bfa32e2825bedcfdf0eac\"\u003e\u003ccode\u003e4c9dbcc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2098\"\u003e#2098\u003c/a\u003e from davidhalter/updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/fedb1a5eb0d74446f6d431db2920ab5f1e1d5b18\"\u003e\u003ccode\u003efedb1a5\u003c/code\u003e\u003c/a\u003e Fix 3.10 tests in one more case\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/87e782f9c82de7297e243a770ac8888570bffa8e\"\u003e\u003ccode\u003e87e782f\u003c/code\u003e\u003c/a\u003e Fix flake8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/cd52d982e10ac54f0ebef06e0bd414f79589998a\"\u003e\u003ccode\u003ecd52d98\u003c/code\u003e\u003c/a\u003e Fixes to get the tests passing for 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/d0b11806d4d1def377234bc2dc512992c997a977\"\u003e\u003ccode\u003ed0b1180\u003c/code\u003e\u003c/a\u003e Finally make tests work for 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8520a9958b489bd8d30cf20b4d2798f7289aab45\"\u003e\u003ccode\u003e8520a99\u003c/code\u003e\u003c/a\u003e Implement support for TypeVar inference for \u003cstrong\u003enew\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/55e5f0cb92dd92d5bdc80ecfc38664a1afd921d1\"\u003e\u003ccode\u003e55e5f0c\u003c/code\u003e\u003c/a\u003e Implement new-style unions with TypeVars\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.2...v0.20.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `kaleido` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/kaleido/releases\"\u003ekaleido's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow for request headers to be added to Choreographer calls [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/446\"\u003e#446\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUpdate Choreographer to v1.3.0 [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/449\"\u003e#449\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003cli\u003eFix issue where exporting large figures could cause hang [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/442\"\u003e#442\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/EliasTalcott\"\u003e\u003ccode\u003e@​EliasTalcott\u003c/code\u003e\u003c/a\u003e for the contribution!\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/Kaleido/blob/master/CHANGELOG.md\"\u003ekaleido's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow for request headers to be added to Choreographer calls [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/446\"\u003e#446\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUpdate Choreographer to v1.3.0 [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/449\"\u003e#449\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003cli\u003eFix issue where exporting large figures could cause hang [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/442\"\u003e#442\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/EliasTalcott\"\u003e\u003ccode\u003e@​EliasTalcott\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.3.0rc0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/Kaleido/commit/b7a00c41895ab71b67e5b89b40f186c3f1cecbed\"\u003e\u003ccode\u003eb7a00c4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/451\"\u003e#451\u003c/a\u003e from plotly/release-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/423a4f1cc6cbc701f9238281d63324508f12a272\"\u003e\u003ccode\u003e423a4f1\u003c/code\u003e\u003c/a\u003e Update setuptools config to find required subpackages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/28131a743143cc5d134c6e962b603ff3a5ed6253\"\u003e\u003ccode\u003e28131a7\u003c/code\u003e\u003c/a\u003e Updates for release v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/f72dc86fa75afbca8756fcd9c9b5af550f038d75\"\u003e\u003ccode\u003ef72dc86\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/366\"\u003e#366\u003c/a\u003e from tschm/patch-3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/0c5e89030709bc873806c08542ae66afea304f71\"\u003e\u003ccode\u003e0c5e890\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/450\"\u003e#450\u003c/a\u003e from plotly/cam/js-dependency-updates-may-2026\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/4e95de54ad7874e254665444070cf613104749f5\"\u003e\u003ccode\u003e4e95de5\u003c/code\u003e\u003c/a\u003e Bump pygments from 2.19.2 to 2.20.0 in /src/py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/90ddc9d7e83d4b27cc11a44a9ca15c5d2c6c5688\"\u003e\u003ccode\u003e90ddc9d\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.2.3 to 2.6.3 in /src/py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/f9b850eb38d7d9bb3f24258012d776f03ad355a0\"\u003e\u003ccode\u003ef9b850e\u003c/code\u003e\u003c/a\u003e chore: Update JS dependencies for security fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/0978e65f23fbba486d005df1508e008a080d20e4\"\u003e\u003ccode\u003e0978e65\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/432\"\u003e#432\u003c/a\u003e from plotly/dependabot/npm_and_yarn/src/js/minimatch-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/b639582c0416f48a682ad01d157af22881d94f75\"\u003e\u003ccode\u003eb639582\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/429\"\u003e#429\u003c/a\u003e from plotly/dependabot/npm_and_yarn/src/js/qs-6.14.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/kaleido/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `llvmlite` from 0.46.0b1 to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numba/llvmlite/releases\"\u003ellvmlite's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0\u003c/h2\u003e\n\u003cp\u003eFor detailed release notes, see: \u003ca href=\"https://llvmlite.readthedocs.io/en/v0.47.0/\"\u003ehttps://llvmlite.readthedocs.io/en/v0.47.0/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.46.0\u003c/h2\u003e\n\u003cp\u003eFor detailed release notes, see: \u003ca href=\"https://llvmlite.readthedocs.io/en/v0.46.0\"\u003ehttps://llvmlite.readthedocs.io/en/v0.46.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/numba/llvmlite/commit/a1b33d2c2dac939a6263c544afd46eb66189b740\"\u003e\u003ccode\u003ea1b33d2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numba/llvmlite/issues/1412\"\u003e#1412\u003c/a\u003e from swap357/release0.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/908fd0e36e1e8f0be1a36d66394b5bc838853106\"\u003e\u003ccode\u003e908fd0e\u003c/code\u003e\u003c/a\u003e add final changelog entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/f4f904208aec1d1516946f5f38a2737a61a8087e\"\u003e\u003ccode\u003ef4f9042\u003c/code\u003e\u003c/a\u003e update CHANGE_LOG for v0.47.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/01d2b0401d1a5e19b185c582c69421e15f166561\"\u003e\u003ccode\u003e01d2b04\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numba/llvmlite/issues/1406\"\u003e#1406\u003c/a\u003e from swap357/release0.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/2b62a94af24c109bfd9213422363f3e42e6b8070\"\u003e\u003ccode\u003e2b62a94\u003c/code\u003e\u003c/a\u003e update changelog for 0.47.0rc1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/fafaa85470bd70aa31711f075f8fee7f3e5d3dee\"\u003e\u003ccode\u003efafaa85\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numba/llvmlite/issues/1403\"\u003e#1403\u003c/a\u003e from numba/renovate/major-github-artifact-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/ec1375e4ba338a7960050260d6599c3549e48891\"\u003e\u003ccode\u003eec1375e\u003c/code\u003e\u003c/a\u003e chore(deps): update github artifact actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/d869142f16105eee20353379e65a4e6805d34c9d\"\u003e\u003ccode\u003ed869142\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numba/llvmlite/issues/569\"\u003e#569\u003c/a\u003e from ARF1/wip/fix_setup_clean\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https:...\n\n_Description has been truncated_","html_url":"https://github.com/AnilKumarPacker/openalgo/pull/18","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnilKumarPacker%2Fopenalgo/issues/18","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/18/packages"},{"uuid":"4473877687","node_id":"PR_kwDORxgoEs7c49ou","number":177,"state":"closed","title":"chore(deps): Bump the production group across 1 directory with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-25T22:34:56.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-19T02:11:23.000Z","updated_at":"2026-05-25T22:34:58.000Z","time_to_close":591813,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"production","update_count":18,"packages":[{"name":"pandas","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pandas-dev/pandas"},{"name":"numpy","old_version":"2.4.4","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"pyarrow","old_version":"23.0.1","new_version":"24.0.0","repository_url":"https://github.com/apache/arrow"},{"name":"streamlit","old_version":"1.56.0","new_version":"1.57.0","repository_url":"https://github.com/streamlit/streamlit"},{"name":"pydantic","old_version":"2.13.3","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":"onnxruntime","old_version":"1.24.4","new_version":"1.26.0","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"altair","old_version":"6.0.0","new_version":"6.1.0","repository_url":"https://github.com/vega/altair"},{"name":"cachetools","old_version":"7.0.5","new_version":"7.1.3","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.3.2","new_version":"8.4.0","repository_url":"https://github.com/pallets/click"},{"name":"gitpython","old_version":"3.1.46","new_version":"3.1.50","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"idna","old_version":"3.11","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"narwhals","old_version":"2.20.0","new_version":"2.21.2","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"packaging","old_version":"26.1","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pydantic-core","old_version":"2.46.3","new_version":"2.46.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production group with 18 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pandas](https://github.com/pandas-dev/pandas) | `3.0.2` | `3.0.3` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.4` | `2.4.6` |\n| [pyarrow](https://github.com/apache/arrow) | `23.0.1` | `24.0.0` |\n| [streamlit](https://github.com/streamlit/streamlit) | `1.56.0` | `1.57.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.3` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.24.4` | `1.26.0` |\n| [altair](https://github.com/vega/altair) | `6.0.0` | `6.1.0` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.5` | `7.1.3` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [click](https://github.com/pallets/click) | `8.3.2` | `8.4.0` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.46` | `3.1.50` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.15` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.20.0` | `2.21.2` |\n| [packaging](https://github.com/pypa/packaging) | `26.1` | `26.2` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.3` | `2.46.4` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.2` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n\n\nUpdates `pandas` from 3.0.2 to 3.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pandas-dev/pandas/releases\"\u003epandas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epandas 3.0.3\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release of pandas 3.0.3.\nThis is a patch release in the 3.0.x series and includes some regression fixes and bug fixes. We recommend that all users of the 3.0.x series upgrade to this version.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca href=\"https://pandas.pydata.org/docs/whatsnew/v3.0.3.html\"\u003efull whatsnew\u003c/a\u003e for a list of all the changes.\u003c/p\u003e\n\u003cp\u003ePandas 3.0 supports Python 3.11 and higher.\nThe release can be installed from PyPI:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pandas==3.0.*\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOr from conda-forge\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003econda install -c conda-forge pandas=3.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePlease report any issues with the release on the \u003ca href=\"https://github.com/pandas-dev/pandas/issues\"\u003epandas issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThanks to all the contributors who made this release possible.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/72f2fea91530b5abb3cf2100cb22d84e504695c0\"\u003e\u003ccode\u003e72f2fea\u003c/code\u003e\u003c/a\u003e RLS: 3.0.3 (\u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65590\"\u003e#65590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/2897590094c2b6e3962d01a82665936f30be563d\"\u003e\u003ccode\u003e2897590\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65436\"\u003e#65436\u003c/a\u003e on branch 3.0.x (Account for privatization of matplotlib `...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/49894b5b6037c50f6444504070d9b1e8e514001a\"\u003e\u003ccode\u003e49894b5\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65499\"\u003e#65499\u003c/a\u003e on branch 3.0.x (BUG: fix check if pyarrow is installed in...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/1c6d1e30cc4b80bedb769a8b3731b0788f69c9dc\"\u003e\u003ccode\u003e1c6d1e3\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] PERF: remove special casing for zoneinfo in tz_localize_to_u...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/2a547116afc46d88d4e6584670fd793949222a1e\"\u003e\u003ccode\u003e2a54711\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/64379\"\u003e#64379\u003c/a\u003e on branch 3.0.x (PERF: improve performance with ZoneInfo t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/036bb7c0e7160b9d5a7f6bd26a9fc00921fa6977\"\u003e\u003ccode\u003e036bb7c\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65482\"\u003e#65482\u003c/a\u003e on branch 3.0.x (PERF: don't call unique on dtypes for che...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/bf4c182b09251f5b469e8e246ae3ea3e1ae07164\"\u003e\u003ccode\u003ebf4c182\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65410\"\u003e#65410\u003c/a\u003e on branch 3.0.x (TST: also convert str index to object in ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/dd02d75ce219135f9f3f65c13644d4be35585d42\"\u003e\u003ccode\u003edd02d75\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] BUG: keep fsspec OpenFile alive for chained URL reads (\u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/6547\"\u003e#6547\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/aef3d0f6698667262c6d6ffc69180b280b0fa86a\"\u003e\u003ccode\u003eaef3d0f\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] CI: lowercase types-pymysql/types-pyyaml to fix mamba 2.6.0 ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/bb8e24876273a14322047f4b89e648f6a4abebae\"\u003e\u003ccode\u003ebb8e248\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65399\"\u003e#65399\u003c/a\u003e on branch 3.0.x (DOC: fix source link for classes in the r...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pandas-dev/pandas/compare/v3.0.2...v3.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.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 `pyarrow` from 23.0.1 to 24.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/apache/arrow/releases\"\u003epyarrow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eApache Arrow 24.0.0\u003c/h2\u003e\n\u003cp\u003eRelease Notes URL: \u003ca href=\"https://arrow.apache.org/release/24.0.0.html\"\u003ehttps://arrow.apache.org/release/24.0.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eApache Arrow 24.0.0 RC0\u003c/h2\u003e\n\u003cp\u003eRelease Notes: Release Candidate: 24.0.0 RC0\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/apache/arrow/commit/31b4b6c0a0a7e7c117312d285541a21446675ec6\"\u003e\u003ccode\u003e31b4b6c\u003c/code\u003e\u003c/a\u003e MINOR: [Release] Update versions for 24.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/06dbc179b4d4af4d8fcd2eb7365e4f0ccc37fcb5\"\u003e\u003ccode\u003e06dbc17\u003c/code\u003e\u003c/a\u003e MINOR: [Release] Update .deb/.rpm changelogs for 24.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/a021d80fffbcaa17959aa3cf491328cc389865aa\"\u003e\u003ccode\u003ea021d80\u003c/code\u003e\u003c/a\u003e MINOR: [Release] Update CHANGELOG.md for 24.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/2d6b12c9caced34a70207d2a303b2a00470e4388\"\u003e\u003ccode\u003e2d6b12c\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49716\"\u003eGH-49716\u003c/a\u003e: [C++] FixedShapeTensorType::Deserialize should strictly validate se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/a74cb6aad96d3c7e7fbfad36ceb8e7f637229f54\"\u003e\u003ccode\u003ea74cb6a\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49697\"\u003eGH-49697\u003c/a\u003e: [C++][CI] Check IPC file body bounds are in sync with decoder outco...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/871a0c665647200b1ad1837ccebe64bfa703a5d3\"\u003e\u003ccode\u003e871a0c6\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49676\"\u003eGH-49676\u003c/a\u003e: [Python][Packaging] Fix gRPC docker image layer being too big for h...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/f9203b34e308a5ab67042fd9ddd5e7ab528896a2\"\u003e\u003ccode\u003ef9203b3\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49586\"\u003eGH-49586\u003c/a\u003e: [C++][CI] StructToStructSubset test failure with libc++ 22.1.1 (\u003ca href=\"https://redirect.github.com/apache/arrow/issues/49\"\u003e#49\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/fe298b424f4c7e33cdc9331221ece9302f6abb26\"\u003e\u003ccode\u003efe298b4\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49628\"\u003eGH-49628\u003c/a\u003e: [Python][Interchange protocol] Suppress warnings for pandas 4.0.0 a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/1f94910cdd840a84c2007b5837e577d517be7984\"\u003e\u003ccode\u003e1f94910\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49252\"\u003eGH-49252\u003c/a\u003e: [GLib] Deprecate Feather features (\u003ca href=\"https://redirect.github.com/apache/arrow/issues/49673\"\u003e#49673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/5ba5c3ca1af2d540f17bd1db91c103d40abefd1b\"\u003e\u003ccode\u003e5ba5c3c\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49671\"\u003eGH-49671\u003c/a\u003e: [CI][Docs] Don't run jobs for push by Dependabot (\u003ca href=\"https://redirect.github.com/apache/arrow/issues/49672\"\u003e#49672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/apache/arrow/compare/apache-arrow-23.0.1...apache-arrow-24.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `streamlit` from 1.56.0 to 1.57.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/streamlit/streamlit/releases\"\u003estreamlit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.57.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking Changes 🛠\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[feature] Make Starlette the default server and remove Tornado by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14553\"\u003estreamlit/streamlit#14553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Remove deprecated kwargs from \u003ccode\u003eplotly_chart\u003c/code\u003e and \u003ccode\u003evega_lite_chart\u003c/code\u003e by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14800\"\u003estreamlit/streamlit#14800\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Remove deprecated \u003ccode\u003e_get_websocket_headers\u003c/code\u003e function by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14801\"\u003estreamlit/streamlit#14801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Direct polars to arrow conversion bypassing pandas by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14885\"\u003estreamlit/streamlit#14885\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features 🎉\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[feature] Hide chevron for menu-style icon labels for \u003ccode\u003est.menu_button\u003c/code\u003e and \u003ccode\u003est.popover\u003c/code\u003e by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14697\"\u003estreamlit/streamlit#14697\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Add pills, segmented_control properties and dataframe key to AppTest by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14518\"\u003estreamlit/streamlit#14518\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Add \u003ccode\u003etitle\u003c/code\u003e parameter to alert elements by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14665\"\u003estreamlit/streamlit#14665\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feat] Add \u003ccode\u003e:shimmer[]\u003c/code\u003e markdown directive for animated loading text by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14055\"\u003estreamlit/streamlit#14055\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Expose \u003ccode\u003eApp\u003c/code\u003e in the \u003ccode\u003est\u003c/code\u003e namespace by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14722\"\u003estreamlit/streamlit#14722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBundle OSS developing-with-streamlit core skills in pip package by \u003ca href=\"https://github.com/sfc-gh-nbellante\"\u003e\u003ccode\u003e@​sfc-gh-nbellante\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14745\"\u003estreamlit/streamlit#14745\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Add border radius to video and map elements by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14781\"\u003estreamlit/streamlit#14781\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Add \u003ccode\u003esecrets\u003c/code\u003e parameter to \u003ccode\u003est.App\u003c/code\u003e by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14861\"\u003estreamlit/streamlit#14861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd app and theme templates to bundled skills by \u003ca href=\"https://github.com/sfc-gh-nbellante\"\u003e\u003ccode\u003e@​sfc-gh-nbellante\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14746\"\u003estreamlit/streamlit#14746\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Expose \u003ccode\u003est.bottom\u003c/code\u003e container by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14726\"\u003estreamlit/streamlit#14726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[feature] Deduplicate equivalent file extensions in file uploader display by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14552\"\u003estreamlit/streamlit#14552\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] \u003ccode\u003est.dataframe\u003c/code\u003e crash with pandas 3 ArrowStringArray by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14611\"\u003estreamlit/streamlit#14611\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(caching): chain original exception in UnserializableReturnValueError by \u003ca href=\"https://github.com/mango766\"\u003e\u003ccode\u003e@​mango766\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14655\"\u003estreamlit/streamlit#14655\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] inconsistent space encoding in query params by \u003ca href=\"https://github.com/sfc-gh-lwilby\"\u003e\u003ccode\u003e@​sfc-gh-lwilby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14691\"\u003estreamlit/streamlit#14691\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Preserve \u003ccode\u003eNone\u003c/code\u003e values in \u003ccode\u003est.data_editor\u003c/code\u003e with pandas 3.0+ by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14694\"\u003estreamlit/streamlit#14694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[Fix] Add CSS Color Level 4 support by \u003ca href=\"https://github.com/mayagbarnes\"\u003e\u003ccode\u003e@​mayagbarnes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14674\"\u003estreamlit/streamlit#14674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Evict namespace children when watched sources reload by \u003ca href=\"https://github.com/sfc-gh-lwilby\"\u003e\u003ccode\u003e@​sfc-gh-lwilby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14708\"\u003estreamlit/streamlit#14708\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Downcast large Arrow types in custom component v1 serialization by \u003ca href=\"https://github.com/sfc-gh-nbellante\"\u003e\u003ccode\u003e@​sfc-gh-nbellante\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14617\"\u003estreamlit/streamlit#14617\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Retain st.radio selection for format_func and custom options by \u003ca href=\"https://github.com/sfc-gh-lwilby\"\u003e\u003ccode\u003e@​sfc-gh-lwilby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14815\"\u003estreamlit/streamlit#14815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix bar_chart axis labels not swapping when horizontal=True by \u003ca href=\"https://github.com/kmcgrady\"\u003e\u003ccode\u003e@​kmcgrady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14866\"\u003estreamlit/streamlit#14866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] st.text_area height='content' sizing on initial load by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14884\"\u003estreamlit/streamlit#14884\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[chore] Update emojis/material icons by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14576\"\u003estreamlit/streamlit#14576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Release v1.56.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14598\"\u003estreamlit/streamlit#14598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs for dataframe programmatic selections by \u003ca href=\"https://github.com/MathCatsAnd\"\u003e\u003ccode\u003e@​MathCatsAnd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14616\"\u003estreamlit/streamlit#14616\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Update emojis/material icons by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14649\"\u003estreamlit/streamlit#14649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Update emojis/material icons by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14752\"\u003estreamlit/streamlit#14752\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Update emojis/material icons by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14869\"\u003estreamlit/streamlit#14869\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs for audio and video columns by \u003ca href=\"https://github.com/MathCatsAnd\"\u003e\u003ccode\u003e@​MathCatsAnd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14628\"\u003estreamlit/streamlit#14628\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/dagecko\"\u003e\u003ccode\u003e@​dagecko\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14554\"\u003estreamlit/streamlit#14554\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mango766\"\u003e\u003ccode\u003e@​mango766\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14655\"\u003estreamlit/streamlit#14655\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sfc-gh-wschmitt\"\u003e\u003ccode\u003e@​sfc-gh-wschmitt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14922\"\u003estreamlit/streamlit#14922\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/streamlit/streamlit/compare/1.56.0...1.57.0\"\u003ehttps://github.com/streamlit/streamlit/compare/1.56.0...1.57.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/streamlit/streamlit/commit/62ec5f3b703cd47a89d5400e7da1398d64226989\"\u003e\u003ccode\u003e62ec5f3\u003c/code\u003e\u003c/a\u003e Up version to 1.57.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/543575f59dd45709a1844d842f1125c860c4aa54\"\u003e\u003ccode\u003e543575f\u003c/code\u003e\u003c/a\u003e feat(host-comm): add PRINT_APP host-to-guest postMessage type (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14922\"\u003e#14922\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/fa67e32019b57d2a17d169c2132a9bf87cebe7fa\"\u003e\u003ccode\u003efa67e32\u003c/code\u003e\u003c/a\u003e [feature] Expose \u003ccode\u003est.bottom\u003c/code\u003e container (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14726\"\u003e#14726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/e463b411086b509a49ad3e1152137ec1ef1b4385\"\u003e\u003ccode\u003ee463b41\u003c/code\u003e\u003c/a\u003e [feature] Add installed_skills (and agents) telemetry to page profile (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14916\"\u003e#14916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/985fa7b6f4a77e86cefeca10794d236a8ae7fcf3\"\u003e\u003ccode\u003e985fa7b\u003c/code\u003e\u003c/a\u003e Add app and theme templates to bundled skills (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14746\"\u003e#14746\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/bea9013f5d21beadef88cbac2493d7defcf616e0\"\u003e\u003ccode\u003ebea9013\u003c/code\u003e\u003c/a\u003e [feature] Add \u003ccode\u003esecrets\u003c/code\u003e parameter to \u003ccode\u003est.App\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14861\"\u003e#14861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/b13f0fa386b9af7323b6216c458f6ce971811b06\"\u003e\u003ccode\u003eb13f0fa\u003c/code\u003e\u003c/a\u003e [skill] Set minimum height for embedded apps (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14498\"\u003e#14498\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/1f7abf9d79a075baf5ae6439efade69fafcce129\"\u003e\u003ccode\u003e1f7abf9\u003c/code\u003e\u003c/a\u003e [feature] Direct polars to arrow conversion bypassing pandas (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14885\"\u003e#14885\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/dbacaad563b357443363790fb68655507ebebf75\"\u003e\u003ccode\u003edbacaad\u003c/code\u003e\u003c/a\u003e [fix] Add border radius to video and map elements (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14781\"\u003e#14781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/5cb5545740bc7bbb98b86355b9e9210492bbb3f2\"\u003e\u003ccode\u003e5cb5545\u003c/code\u003e\u003c/a\u003e Bump ruff from 0.15.10 to 0.15.11 (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14908\"\u003e#14908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/streamlit/streamlit/compare/1.56.0...1.57.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/v2.13.4/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 `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 `onnxruntime` from 1.24.4 to 1.26.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/microsoft/onnxruntime/releases\"\u003eonnxruntime's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.26.0\u003c/h2\u003e\n\u003cp\u003en.b. The following was generated via LLM from Git history. Only the contributor list has been verified.\u003c/p\u003e\n\u003ch1\u003eONNX Runtime Release 1.26.0\u003c/h1\u003e\n\u003ch2\u003eAnnouncement - Breaking Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSupport for CUDA 12 will be removed in 1.27.0.\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eCUDA 13 will continue to be published as \u003ccode\u003eonnxruntime-\u0026lt;os\u0026gt;-\u0026lt;arch\u0026gt;-gpu_cuda13-\u0026lt;version\u0026gt;.\u0026lt;ext\u0026gt;\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eCUDA runtime will be moving soon to a dedicated Execution Provider (EP) instead of a published package from ORT core.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded optional memory mapping for \u003ccode\u003e.ort\u003c/code\u003e model loads (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28164\"\u003e#28164\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded RISC-V Vector (RVV) support for CPU EP (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28261\"\u003e#28261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eOpenVINO EP upgraded for 1.26.0 development release (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28297\"\u003e#28297\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eWebGPU gained GridSample support (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28264\"\u003e#28264\u003c/a\u003e) and Split-K improvements (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28151\"\u003e#28151\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCUDA plugin EP gained graph support (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28002\"\u003e#28002\u003c/a\u003e), profiling API (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28216\"\u003e#28216\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity and Reliability Hardening\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced unrestricted Python \u003ccode\u003esetattr\u003c/code\u003e configuration with an allowlist (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28083\"\u003e#28083\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eHardened multiple OOB and overflow scenarios across ML and core ops:\n\u003cul\u003e\n\u003cli\u003eAttention mask index OOB write (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27789\"\u003e#27789\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMaxPoolGrad indices bounds validation (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27903\"\u003e#27903\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSVM and TreeEnsemble bounds/security fixes (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27950\"\u003e#27950\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27951\"\u003e#27951\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27952\"\u003e#27952\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27989\"\u003e#27989\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRNN sequence_lens OOB read and integer overflow handling (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28052\"\u003e#28052\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28003\"\u003e#28003\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGroupQueryAttention seqlens_k bounds validation and compatibility follow-up (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28031\"\u003e#28031\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28259\"\u003e#28259\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMatMulBnb4 and ML coefficient SafeInt checks (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27995\"\u003e#27995\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28001\"\u003e#28001\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCUDA Gather int32 overflow fix (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28108\"\u003e#28108\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGridSample float-\u0026gt;int64 cast hardening for NaN/Inf/out-of-range coords (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28302\"\u003e#28302\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixed session logger use-after-free during EP teardown under verbose logging (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28274\"\u003e#28274\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eCUDA, Attention, and MLAS\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFilled CUDA opset/operator gaps and extended support:\n\u003cul\u003e\n\u003cli\u003eTranspose opset 23 -\u0026gt; 25 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27740\"\u003e#27740\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eQuantizeLinear/DequantizeLinear opset 25 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28046\"\u003e#28046\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCUDA TopK INT8/INT16/UINT8 support (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27862\"\u003e#27862\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eLabelEncoder CUDA support for numeric types (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28045\"\u003e#28045\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAttention/GQA improvements:\n\u003cul\u003e\n\u003cli\u003eFixed ONNX Attention min-bias alignment crash on SM\u0026lt;80 and masked-batch NaN behavior (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27831\"\u003e#27831\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded FP32 QK accumulation path for unfused GQA attention (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28198\"\u003e#28198\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded CUDART_VERSION reduction compatibility in GQA attention (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28296\"\u003e#28296\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed CUDA 13 build error in GQA unfused attention (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28309\"\u003e#28309\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003ePagedAttention fallback for SM\u0026lt;80 fp16 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28200\"\u003e#28200\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eMLAS updates:\n\u003cul\u003e\n\u003cli\u003eFP16 Gelu enablement (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/26815\"\u003e#26815\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eArm64 BF16 fast-math conv kernels for NCHW/NCHWc paths (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27878\"\u003e#27878\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/8c546c37b43caaca1fa25db430dab94b901cf277\"\u003e\u003ccode\u003e8c546c3\u003c/code\u003e\u003c/a\u003e 1.26.0 - cherry-pick for RC2 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28347\"\u003e#28347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/55c5c822a02e6237a667c13cd5ed008cd55bb459\"\u003e\u003ccode\u003e55c5c82\u003c/code\u003e\u003c/a\u003e GridSample: harden float-\u0026gt;int64 casts against NaN/Inf/out-of-range coords (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/2\"\u003e#2\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/60ce9ccd65ebb1794110c4dddf2e110cf223e9f9\"\u003e\u003ccode\u003e60ce9cc\u003c/code\u003e\u003c/a\u003e Relax GQA seqlens_k shape validation for backward compat with older models (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/d02a0fd536d7cf6b88bfd268932d2933a1c3305c\"\u003e\u003ccode\u003ed02a0fd\u003c/code\u003e\u003c/a\u003e Fix DoubleQDQPairsRemover adding spurious dimension to scalar scale/zero-poin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/9b30f306e40683df362249b7c139177cc83e352f\"\u003e\u003ccode\u003e9b30f30\u003c/code\u003e\u003c/a\u003e remove weights_are_all_positive_  from TreeEnsemble (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/27552\"\u003e#27552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/5f2f848a6874d390c94502b3bb424447b119b975\"\u003e\u003ccode\u003e5f2f848\u003c/code\u003e\u003c/a\u003e fix(ci): incorrect relative template includes for setup-feeds (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28312\"\u003e#28312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/de2bc90ce09d8bab419e07e1db741f445a27f721\"\u003e\u003ccode\u003ede2bc90\u003c/code\u003e\u003c/a\u003e Add QNN Plugin EP repo link to README (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28225\"\u003e#28225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/8dd4a06811179a7c04aea0a97c65f45a3dc8c6af\"\u003e\u003ccode\u003e8dd4a06\u003c/code\u003e\u003c/a\u003e Include license file in built distributions (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/27783\"\u003e#27783\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/6e19374beb24cc2fa0e8262c6d51404af87aefc0\"\u003e\u003ccode\u003e6e19374\u003c/code\u003e\u003c/a\u003e Fix CUDA 13 build error in gqa_unfused_attention.cu (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28309\"\u003e#28309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/d6c363c0d192bf2205155a18f01a62efa6b34da1\"\u003e\u003ccode\u003ed6c363c\u003c/code\u003e\u003c/a\u003e [OVEP] OpenVINO EP 1.26.0 Development Release Updates (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28297\"\u003e#28297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/microsoft/onnxruntime/compare/v1.24.4...v1.26.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `altair` from 6.0.0 to 6.1.0\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.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThere are many exciting improvements in this release! Read on for details and a big thanks to everyone who contributed  :tada:\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efeat: Update to Vega-Lite 6.4.1 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/4005\"\u003evega/altair#4005\u003c/a\u003e. See \u003ca href=\"https://github.com/vega/vega-lite/releases\"\u003ethe Vega-Lite Release Notes\u003c/a\u003e for details; a few highlights:\n\u003cul\u003e\n\u003cli\u003eNewlines are now supported in tooltips.\u003c/li\u003e\n\u003cli\u003eThe default stack order of marks like bars and areas is now aligned with the color domain.\u003c/li\u003e\n\u003cli\u003eInteractive charts automatically change the cursor to pointer to indicate they can be interacted with.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efeat: auto hoist facet encodings in layer by \u003ca href=\"https://github.com/thomascamminady\"\u003e\u003ccode\u003e@​thomascamminady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3965\"\u003evega/altair#3965\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eThis allows layering of simple faceted charts that define the same facet variables, instead of requiring that layering happens before faceting.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efeat: Accept ZoneInfo(key='UTC') by \u003ca href=\"https://github.com/JackKelly\"\u003e\u003ccode\u003e@​JackKelly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3944\"\u003evega/altair#3944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add pandas 3 compatibility and fix CI (drop Python 3.9, pin polars \u0026lt;1.38) by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3950\"\u003evega/altair#3950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add ensure_ascii option to to_json() with default False by \u003ca href=\"https://github.com/RamiNoodle733\"\u003e\u003ccode\u003e@​RamiNoodle733\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3952\"\u003evega/altair#3952\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: unique view names per concat cell and correct param.views by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3974\"\u003evega/altair#3974\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Compute unique hashes for identical specs that use different data 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/3982\"\u003evega/altair#3982\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve polars datetime timezones during serialization by \u003ca href=\"https://github.com/kjgoodrick\"\u003e\u003ccode\u003e@​kjgoodrick\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3922\"\u003evega/altair#3922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: type issues with Chart save methods. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3934\"\u003evega/altair#3934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: type issues with Chart mark methods. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3936\"\u003evega/altair#3936\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: improve api.py typing by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3955\"\u003evega/altair#3955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typing issues for mypy 1.18 and above. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3966\"\u003evega/altair#3966\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocs: Highlight new examples in the gallery 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/3999\"\u003evega/altair#3999\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eIt's now easier to find which examples have been \u003ca href=\"https://altair-viz.github.io/gallery/index.html\"\u003erecently added to the Altair gallery\u003c/a\u003e and the page looks more visually appealing overall.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003edocs: add WASM / Pyodide installation instructions by \u003ca href=\"https://github.com/ArnavTomar18\"\u003e\u003ccode\u003e@​ArnavTomar18\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3932\"\u003evega/altair#3932\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Correct some grammar issues by \u003ca href=\"https://github.com/star1327p\"\u003e\u003ccode\u003e@​star1327p\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3942\"\u003evega/altair#3942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add identity line (x=y diagonal) example to rule mark docs by \u003ca href=\"https://github.com/stbiadmin\"\u003e\u003ccode\u003e@​stbiadmin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3969\"\u003evega/altair#3969\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Correct tooltip field for faceted choropleth example by \u003ca href=\"https://github.com/Sparlitu\"\u003e\u003ccode\u003e@​Sparlitu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3920\"\u003evega/altair#3920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: wrong tooltip variable id -\u0026gt; county_id by \u003ca href=\"https://github.com/thomascamminady\"\u003e\u003ccode\u003e@​thomascamminady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3924\"\u003evega/altair#3924\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: a HConcatChart -\u0026gt; an HConcatChart by \u003ca href=\"https://github.com/star1327p\"\u003e\u003ccode\u003e@​star1327p\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3917\"\u003evega/altair#3917\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Substitute field strings correctly so that points in theme display chart show up 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/3984\"\u003evega/altair#3984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Change the lead size to fit on two rows 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/3980\"\u003evega/altair#3980\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Make the first page title fit on one row 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/3979\"\u003evega/altair#3979\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix broken density example 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/3985\"\u003evega/altair#3985\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Simplify inline expr syntax 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/3996\"\u003evega/altair#3996\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebuild: Speed up doc build time for faster local development 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/3997\"\u003evega/altair#3997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Add watch option to automatically rebuild docs upon detected changes 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/3998\"\u003evega/altair#3998\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Create docs CLI to facilitate different build combinations 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/4000\"\u003evega/altair#4000\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump dev version to 6.1.0dev by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3913\"\u003evega/altair#3913\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estyle: Make chained chart methods work with type checkers other than pyright by \u003ca href=\"https://github.com/hamdanal\"\u003e\u003ccode\u003e@​hamdanal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3933\"\u003evega/altair#3933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: bump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3928\"\u003evega/altair#3928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump urllib3 from 2.5.0 to 2.6.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/vega/altair/pull/3939\"\u003evega/altair#3939\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/vega/altair/commit/af1450f413fd046da032857519bba536dad97910\"\u003e\u003ccode\u003eaf1450f\u003c/code\u003e\u003c/a\u003e chore: 🔧 Bump versions for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/af071276321b64a8ea66a773dbc60d659dd41fa1\"\u003e\u003ccode\u003eaf07127\u003c/code\u003e\u003c/a\u003e feat: Update to Vega-Lite 6.4.1 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4005\"\u003e#4005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/e093674705eebaab23887318e190b0cc0977cc21\"\u003e\u003ccode\u003ee093674\u003c/code\u003e\u003c/a\u003e harden prerelease workflow (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4008\"\u003e#4008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/942dead2972aee5efde8f1488b06c0a8fba58b26\"\u003e\u003ccode\u003e942dead\u003c/code\u003e\u003c/a\u003e build(deps): bump uv from 0.10.4 to 0.11.6 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4004\"\u003e#4004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/127f79f7b456450729914950ec2a063c02699b9c\"\u003e\u003ccode\u003e127f79f\u003c/code\u003e\u003c/a\u003e docs: Highlight new examples in the gallery (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/59561f8fee41d0d1d872f9dba855cc36651c869e\"\u003e\u003ccode\u003e59561f8\u003c/code\u003e\u003c/a\u003e fix: Compute unique hashes for identical specs that use different data (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3982\"\u003e#3982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/60a3fb7da35b5f4b9c715b85e6a81c0154df7cc9\"\u003e\u003ccode\u003e60a3fb7\u003c/code\u003e\u003c/a\u003e build(deps): bump tornado from 6.5.4 to 6.5.5 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3978\"\u003e#3978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/33bc6379e7c0e38f92a04a84ed52d39c02fb3f38\"\u003e\u003ccode\u003e33bc637\u003c/code\u003e\u003c/a\u003e build(deps): bump cryptography from 46.0.6 to 46.0.7 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4003\"\u003e#4003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/88c446951eb48c13c8078a392f4d79e8b63453d2\"\u003e\u003ccode\u003e88c4469\u003c/code\u003e\u003c/a\u003e docs: Create docs CLI to facilitate different build combinations (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4000\"\u003e#4000\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/a4a20ccc898c487fe80e3c7118bafb58872df113\"\u003e\u003ccode\u003ea4a20cc\u003c/code\u003e\u003c/a\u003e docs: Add watch option to automatically rebuild docs upon detected changes (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/vega/altair/compare/v6.0.0...v6.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.3\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.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/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\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/ed107816b6787d74f21684f6614d4fbbbbb935de\"\u003e\u003ccode\u003eed10781\u003c/code\u003e\u003c/a\u003e Update Copilot instructions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/c624ceb350d50bb733ccaa706613495999b9479f\"\u003e\u003ccode\u003ec624ceb\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/395\"\u003e#395\u003c/a\u003e: Document FIFOCache update behavior.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/1ddec068633641895b6926dcea27276d5149c038\"\u003e\u003ccode\u003e1ddec06\u003c/code\u003e\u003c/a\u003e Fix/396 (\u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/b91818c46624b3be3f4b321426061ba50c08a30e\"\u003e\u003ccode\u003eb91818c\u003c/code\u003e\u003c/a\u003e Drop MANIFEST.in.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.0.5...v7.1.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.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\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.2 to 8.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.0/\"\u003ehttps://pypi.org/project/click/8.4.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParamType\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3371\"\u003e#3371\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3372\"\u003e#3372\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParameter\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2805\"\u003e#2805\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003ePa...\n\n_Description has been truncated_","html_url":"https://github.com/IlyaNovikov-RD/rocket_classifier/pull/177","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaNovikov-RD%2Frocket_classifier/issues/177","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/177/packages"}],"issue_packages":[{"old_version":"7.1.1","new_version":"7.1.4","update_type":"patch","path":null,"pr_created_at":"2026-06-15T00:17:24.000Z","version_change":"7.1.1 → 7.1.4","issue":{"uuid":"4661140028","node_id":"PR_kwDOQIfwjs7mVYWi","number":39,"state":"open","title":"chore(deps): bump the python-minor-patch group with 3 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-15T00:17:24.000Z","updated_at":"2026-06-15T00:18:03.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":3,"packages":[{"name":"cachetools","old_version":"7.1.1","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"python-multipart","old_version":"0.0.30","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"coverage","old_version":"7.14.0","new_version":"7.14.1","repository_url":"https://github.com/coveragepy/coveragepy"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor-patch group with 3 updates: [cachetools](https://github.com/tkem/cachetools), [python-multipart](https://github.com/Kludex/python-multipart) and [coverage](https://github.com/coveragepy/coveragepy).\n\nUpdates `cachetools` from 7.1.1 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\u003c/blockquote\u003e\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.1.1...v7.1.4\"\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.30 to 0.0.32\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/releases\"\u003epython-multipart's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.0.32\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplace per-byte partial-boundary scan with rfind lookbehind by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003eKludex/python-multipart#300\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.31...0.0.32\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.0.31\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003eKludex/python-multipart#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003eKludex/python-multipart#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate Content-Length is non-negative in parse_form by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003eKludex/python-multipart#297\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\"\u003ehttps://github.com/Kludex/python-multipart/compare/0.0.30...0.0.31\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/python-multipart/blob/main/CHANGELOG.md\"\u003epython-multipart's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.0.32 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up partial-boundary scanning for CR/LF-dense part data \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/300\"\u003e#300\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.0.31 (2026-06-04)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSpeed up multipart header parsing and callback dispatch \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/295\"\u003e#295\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eBound header field name size before validating \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/296\"\u003e#296\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eValidate \u003ccode\u003eContent-Length\u003c/code\u003e is non-negative in \u003ccode\u003eparse_form\u003c/code\u003e \u003ca href=\"https://redirect.github.com/Kludex/python-multipart/pull/297\"\u003e#297\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/238ead62a0bb6f6cdfe122708faa13812f59f9a6\"\u003e\u003ccode\u003e238ead6\u003c/code\u003e\u003c/a\u003e Version 0.0.32 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/302\"\u003e#302\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/86729796093b04f7cf414ea6c2c4499e2a5750af\"\u003e\u003ccode\u003e8672979\u003c/code\u003e\u003c/a\u003e Replace per-byte partial-boundary scan with rfind lookbehind (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/300\"\u003e#300\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/8190779d8234c8bf8cbed7891c11d4bfb79e84df\"\u003e\u003ccode\u003e8190779\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 7 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/301\"\u003e#301\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/0d3c086d237f6fd20fefe8853e95979276a07c44\"\u003e\u003ccode\u003e0d3c086\u003c/code\u003e\u003c/a\u003e Use uv package ecosystem for Dependabot (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/299\"\u003e#299\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/4cffc68a165f7a6f6b7756ce006fabf07a05b7a4\"\u003e\u003ccode\u003e4cffc68\u003c/code\u003e\u003c/a\u003e Version 0.0.31 (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/298\"\u003e#298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/c814948acf509cef7881fa75c969969b19239bbf\"\u003e\u003ccode\u003ec814948\u003c/code\u003e\u003c/a\u003e Reject negative \u003ccode\u003eContent-Length\u003c/code\u003e in \u003ccode\u003eparse_form\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/297\"\u003e#297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6b837d47bc68826ed5cbbcb50c6c6a6093444494\"\u003e\u003ccode\u003e6b837d4\u003c/code\u003e\u003c/a\u003e Bound header field name size before validating (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/296\"\u003e#296\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/e0c4f9df2e737d1663fbbdd6563f80613a2089f9\"\u003e\u003ccode\u003ee0c4f9d\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/294\"\u003e#294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/b8a01bb683e8e8675fdb5d831b206a478c8215aa\"\u003e\u003ccode\u003eb8a01bb\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 3 updates (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/293\"\u003e#293\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/python-multipart/commit/6732164f30c58e28589a1e22213d2f6b8c6bad9f\"\u003e\u003ccode\u003e6732164\u003c/code\u003e\u003c/a\u003e Speed up multipart header parsing and callback dispatch (\u003ca href=\"https://redirect.github.com/Kludex/python-multipart/issues/295\"\u003e#295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/python-multipart/compare/0.0.30...0.0.32\"\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.0 to 7.14.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.14.1 — 2026-05-26\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the HTML report used typographic niceties to make file paths more\nreadable by adding a small amount of space around slashes. Those spaces\ninterfered with searching the page for file paths of interest. Now the report\nuses CSS to accomplish the same visual tweak so that searches with slashes\nwork correctly. Closes \u003ccode\u003eissue 2170\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eAdd a 3.16 PyPI classifier \u0026lt;hugo-316_\u0026gt;\u003c/code\u003e_ since we test on the 3.16 main\nbranch.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 2170: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2170\"\u003ecoveragepy/coveragepy#2170\u003c/a\u003e\n.. _hugo-316: \u003ca href=\"https://mastodon.social/@hugovk/116588523571204490\"\u003ehttps://mastodon.social/@​hugovk/116588523571204490\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-14-0:\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/64d9b66fd852c1920ffe6cb8b58d7e4fdae90226\"\u003e\u003ccode\u003e64d9b66\u003c/code\u003e\u003c/a\u003e docs: correct the date for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/6fa7dd44c25e1a660252faaf030dd8f2f1e20861\"\u003e\u003ccode\u003e6fa7dd4\u003c/code\u003e\u003c/a\u003e chore: bump actions/dependency-review-action (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2181\"\u003e#2181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/078afae263597b004eb9a85d880b6a65008e75ed\"\u003e\u003ccode\u003e078afae\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/cb4f028a36e008b664739d04f387b90ee5105044\"\u003e\u003ccode\u003ecb4f028\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ae2d09f562271c6169534e1c242d015dd0823dda\"\u003e\u003ccode\u003eae2d09f\u003c/code\u003e\u003c/a\u003e Merge branch 'nedbat/classifire-316-kits'\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2c3568b2e041f2c0dbbc8eaa3919d46ee891b743\"\u003e\u003ccode\u003e2c3568b\u003c/code\u003e\u003c/a\u003e build: declare 3.16 compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/faa68f8601cf098701b68976dbb73b9fc23c9297\"\u003e\u003ccode\u003efaa68f8\u003c/code\u003e\u003c/a\u003e chore: bump github/codeql-action in the action-dependencies group (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2173\"\u003e#2173\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/eb55feedf54b363e3d0b678f20abf3bfd3551a88\"\u003e\u003ccode\u003eeb55fee\u003c/code\u003e\u003c/a\u003e test: we don't need PyPy \u0026lt; 7.3.22 anymore\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/ac168fe53c04cdb2ff5231c0c4e5045021ee339b\"\u003e\u003ccode\u003eac168fe\u003c/code\u003e\u003c/a\u003e test: the text summary should show missing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/fed4bd2db3c1cb2916a07791041da693fbf8e996\"\u003e\u003ccode\u003efed4bd2\u003c/code\u003e\u003c/a\u003e chore: upgrade virtualenv\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.14.0...7.14.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/onprem-hipster-timer/backend/pull/39","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/onprem-hipster-timer%2Fbackend/issues/39","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/39/packages"}},{"old_version":"7.0.5","new_version":"7.1.4","update_type":"minor","path":null,"pr_created_at":"2026-06-08T19:15:21.000Z","version_change":"7.0.5 → 7.1.4","issue":{"uuid":"4615885150","node_id":"PR_kwDOSrZluM7kDuDx","number":12,"state":"closed","title":"deps(py): bump the python-minor group across 1 directory with 42 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-15T19:17:10.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-08T19:15:21.000Z","updated_at":"2026-06-15T19:17:13.000Z","time_to_close":604909,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(py): bump","group_name":"python-minor","update_count":42,"packages":[{"name":"cachetools","old_version":"7.0.5","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"choreographer","old_version":"1.2.1","new_version":"1.3.0","repository_url":"https://github.com/plotly/choreographer"},{"name":"click","old_version":"8.3.2","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"debugpy","old_version":"1.8.20","new_version":"1.8.21","repository_url":"https://github.com/microsoft/debugpy"},{"name":"decorator","old_version":"5.2.1","new_version":"5.3.1","repository_url":"https://github.com/micheles/decorator"},{"name":"duckdb","old_version":"1.5.2","new_version":"1.5.3","repository_url":"https://github.com/duckdb/duckdb-python"},{"name":"flask-cors","old_version":"6.0.2","new_version":"6.0.3","repository_url":"https://github.com/corydolphin/flask-cors"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.1","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.11","new_version":"3.18","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.12.0","new_version":"9.14.1","repository_url":"https://github.com/ipython/ipython"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"joserfc","old_version":"1.6.4","new_version":"1.7.1","repository_url":"https://github.com/authlib/joserfc"},{"name":"jupyter-client","old_version":"8.8.0","new_version":"8.9.0","repository_url":"https://github.com/jupyter/jupyter_client"},{"name":"kaleido","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/plotly/kaleido"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"matplotlib-inline","old_version":"0.2.1","new_version":"0.2.2","repository_url":"https://github.com/ipython/matplotlib-inline"},{"name":"mcp","old_version":"1.27.0","new_version":"1.27.2","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"narwhals","old_version":"2.19.0","new_version":"2.22.1","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"numpy","old_version":"2.4.4","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"orjson","old_version":"3.11.8","new_version":"3.11.9","repository_url":"https://github.com/ijl/orjson"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"plotly","old_version":"6.6.0","new_version":"6.8.0","repository_url":"https://github.com/plotly/plotly.py"},{"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":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-engineio","old_version":"4.13.1","new_version":"4.13.2","repository_url":"https://github.com/miguelgrinberg/python-engineio"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.32","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"python-socketio","old_version":"5.16.1","new_version":"5.16.2","repository_url":"https://github.com/miguelgrinberg/python-socketio"},{"name":"python-telegram-bot","old_version":"22.6","new_version":"22.7","repository_url":"https://github.com/python-telegram-bot/python-telegram-bot"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"tornado","old_version":"6.5.5","new_version":"6.5.7","repository_url":"https://github.com/tornadoweb/tornado"},{"name":"traitlets","old_version":"5.14.3","new_version":"5.15.1","repository_url":"https://github.com/ipython/traitlets"},{"name":"uvicorn","old_version":"0.44.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.8.1","repository_url":"https://github.com/jquast/wcwidth"},{"name":"wheel","old_version":"0.46.3","new_version":"0.47.0","repository_url":"https://github.com/pypa/wheel"},{"name":"wtforms","old_version":"3.2.1","new_version":"3.2.2","repository_url":"https://github.com/pallets-eco/wtforms"},{"name":"opengreeks","old_version":"0.1.0","new_version":"0.2.0","repository_url":"https://github.com/marketcalls/opengreeks"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 42 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.5` | `7.1.4` |\n| [choreographer](https://github.com/plotly/choreographer) | `1.2.1` | `1.3.0` |\n| [click](https://github.com/pallets/click) | `8.3.2` | `8.4.1` |\n| [debugpy](https://github.com/microsoft/debugpy) | `1.8.20` | `1.8.21` |\n| [decorator](https://github.com/micheles/decorator) | `5.2.1` | `5.3.1` |\n| [duckdb](https://github.com/duckdb/duckdb-python) | `1.5.2` | `1.5.3` |\n| [flask-cors](https://github.com/corydolphin/flask-cors) | `6.0.2` | `6.0.3` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.1` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.18` |\n| [ipython](https://github.com/ipython/ipython) | `9.12.0` | `9.14.1` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [joserfc](https://github.com/authlib/joserfc) | `1.6.4` | `1.7.1` |\n| [jupyter-client](https://github.com/jupyter/jupyter_client) | `8.8.0` | `8.9.0` |\n| [kaleido](https://github.com/plotly/kaleido) | `1.2.0` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [matplotlib-inline](https://github.com/ipython/matplotlib-inline) | `0.2.1` | `0.2.2` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.27.0` | `1.27.2` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.19.0` | `2.22.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.4` | `2.4.6` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.8` | `3.11.9` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [plotly](https://github.com/plotly/plotly.py) | `6.6.0` | `6.8.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| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.1` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [python-engineio](https://github.com/miguelgrinberg/python-engineio) | `4.13.1` | `4.13.2` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.32` |\n| [python-socketio](https://github.com/miguelgrinberg/python-socketio) | `5.16.1` | `5.16.2` |\n| [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) | `22.6` | `22.7` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.50` |\n| [tornado](https://github.com/tornadoweb/tornado) | `6.5.5` | `6.5.7` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14.3` | `5.15.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.44.0` | `0.49.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.8.1` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.47.0` |\n| [wtforms](https://github.com/pallets-eco/wtforms) | `3.2.1` | `3.2.2` |\n| [opengreeks](https://github.com/marketcalls/opengreeks) | `0.1.0` | `0.2.0` |\n\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 `choreographer` from 1.2.1 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/choreographer/blob/main/CHANGELOG.txt\"\u003echoreographer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ev1.3.0\nv1.3.0rc2\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCheck path validity for browser with is_file()\u003c/li\u003e\n\u003cli\u003eAdd option --verify_local in choreo_diagnose and fix local reporting logic\nv1.3.0rc1\u003c/li\u003e\n\u003cli\u003eWe now look for old download path as well as new download path\nv1.3.0rc0\u003c/li\u003e\n\u003cli\u003eChange to process group for better killing of multi-process chrome\u003c/li\u003e\n\u003cli\u003eAdd argument to Session/Target \u003ccode\u003esend_command(..., *, with_perf: bool)\u003c/code\u003e to\nreturn timing information about browser write/read.\u003c/li\u003e\n\u003cli\u003eUpdate default chrome from 135.0.7011.0/1418433 to 144.0.7527.0/1544685\u003c/li\u003e\n\u003cli\u003eFix: New chrome takes longer/doesn't populate targets right away, so add a\nretry loop to populate targets\u003c/li\u003e\n\u003cli\u003eAlter \u003ccode\u003eget_chrome\u003c/code\u003e verbose to print whole JSON\u003c/li\u003e\n\u003cli\u003eChange chrome download path to use XDG cache dir\u003c/li\u003e\n\u003cli\u003eDon't download chrome if we already have that version: add force argument\u003c/li\u003e\n\u003cli\u003eRemove unused system inspection code\u003c/li\u003e\n\u003cli\u003eAdd a set of helper functions to await for tab loading and send javascript\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/choreographer/commit/92147b1ccf024ae647f29ebf43057564011e06c9\"\u003e\u003ccode\u003e92147b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/296\"\u003e#296\u003c/a\u003e from plotly/cam/update-changelog-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/8851fc919bc7dfb27a48541543f1ff195c48eda3\"\u003e\u003ccode\u003e8851fc9\u003c/code\u003e\u003c/a\u003e Updates to release version v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/3128bddf909381a2b4205f0e28c0c3cb8b13498c\"\u003e\u003ccode\u003e3128bdd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/288\"\u003e#288\u003c/a\u003e from plotly/andrew/more_local_logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/a6f478e00fb81ad22db7c7c1d31028fb4ab20311\"\u003e\u003ccode\u003ea6f478e\u003c/code\u003e\u003c/a\u003e Add to changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/953e19ad5dc395a3554cfbaf25599a8a3db6d933\"\u003e\u003ccode\u003e953e19a\u003c/code\u003e\u003c/a\u003e Check browser is file whwen checking path validity\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/d062e355b819b84e57060d4e48fbe2aa6f063259\"\u003e\u003ccode\u003ed062e35\u003c/code\u003e\u003c/a\u003e Change default setting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c0c97fc64a55c773dd7484674996cf55d74249a1\"\u003e\u003ccode\u003ec0c97fc\u003c/code\u003e\u003c/a\u003e Add option to verify local with choreo_diagnose\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/7ade1922269a6999c06f2ff92b34a1770bba6d3e\"\u003e\u003ccode\u003e7ade192\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/286\"\u003e#286\u003c/a\u003e from plotly/andrew/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/edf284c8973dd9dc7f7b2f77a53481fe6f0d2671\"\u003e\u003ccode\u003eedf284c\u003c/code\u003e\u003c/a\u003e Update Roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c1b7abce535feb79748c888ba1130b985c13eb3f\"\u003e\u003ccode\u003ec1b7abc\u003c/code\u003e\u003c/a\u003e Changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/choreographer/compare/v1.2.1...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.2 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.3.2...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `debugpy` from 1.8.20 to 1.8.21\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/microsoft/debugpy/releases\"\u003edebugpy's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003edebugpy v1.8.21\u003c/h2\u003e\n\u003cp\u003eFixes for:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eReturn evaluate result in DAP response body instead of writing to stdout: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2027\"\u003e#2027\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrevent invalid \u003ccode\u003escopes\u003c/code\u003e request from crashing debug session: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2026\"\u003e#2026\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSkip uninitialized \u003ccode\u003e__slots__\u003c/code\u003e in variable resolver: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2024\"\u003e#2024\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle \u003ccode\u003e-c\u003c/code\u003e arguments that are \u003ccode\u003ebytes\u003c/code\u003e instead of \u003ccode\u003estr\u003c/code\u003e: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2021\"\u003e#2021\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix evaluation of variables from chained exception frames: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2018\"\u003e#2018\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eContinueRequest\u003c/code\u003e with a specific \u003ccode\u003ethreadId\u003c/code\u003e no longer resumes all threads (in-process adapter): \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2012\"\u003e#2012\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAvoid strong reference to exceptions during unwind: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2008\"\u003e#2008\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShow error message on evaluate failures in the hover context: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2006\"\u003e#2006\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDisplay \u003ccode\u003edlerror\u003c/code\u003e output when \u003ccode\u003edlopen\u003c/code\u003e fails: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2000\"\u003e#2000\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReplace removed \u003ccode\u003epkgutil.get_loader\u003c/code\u003e with \u003ccode\u003eimportlib.util.find_spec\u003c/code\u003e in \u003ccode\u003eget_fullname\u003c/code\u003e: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/1998\"\u003e#1998\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eEnhancements:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd option to ignore all system exit codes: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2017\"\u003e#2017\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePull changes from pydevd up to March 2026: \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2010\"\u003e#2010\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eInfrastructure work:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSuppress Flawfinder false positives on Cython memcpy / read-loop iterators (TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816216\"\u003e#2816216\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816217\"\u003e#2816217\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816218\"\u003e#2816218\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816219\"\u003e#2816219\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816220\"\u003e#2816220\u003c/a\u003e): \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2028\"\u003e#2028\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2029\"\u003e#2029\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2030\"\u003e#2030\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2031\"\u003e#2031\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/debugpy/pull/2032\"\u003e#2032\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to \u003ca href=\"https://github.com/maxbachmann\"\u003e\u003ccode\u003e@​maxbachmann\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/mfussenegger\"\u003e\u003ccode\u003e@​mfussenegger\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/sambrightman\"\u003e\u003ccode\u003e@​sambrightman\u003c/code\u003e\u003c/a\u003e for the commits.\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/microsoft/debugpy/commit/858b05c08555cfc54efa7cf90e70184c7495b38e\"\u003e\u003ccode\u003e858b05c\u003c/code\u003e\u003c/a\u003e Fix TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816217\"\u003e#2816217\u003c/a\u003e: suppress Flawfinder false positive on Cython JoinPyUnicode ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/f0c34f133ad3eb7992ca50e45e5459f9d58f4be8\"\u003e\u003ccode\u003ef0c34f1\u003c/code\u003e\u003c/a\u003e Fix TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816216\"\u003e#2816216\u003c/a\u003e: suppress Flawfinder false positive on Cython DIGIT_PAIRS_8 ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/4c70e13d0e3fc8eee5013cd2a41c7a6d752d55d3\"\u003e\u003ccode\u003e4c70e13\u003c/code\u003e\u003c/a\u003e Fix TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816218\"\u003e#2816218\u003c/a\u003e: suppress Flawfinder false positive on Cython read-loop iter...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/19c2b8c029975a6ba2e4e521d8fbdf5f1b3ed8fd\"\u003e\u003ccode\u003e19c2b8c\u003c/code\u003e\u003c/a\u003e Fix TSA \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2816220\"\u003e#2816220\u003c/a\u003e: suppress Flawfinder false positive on Cython read-loop iter...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/ab9263839637357f3372ffb550395ffbf8ce9f77\"\u003e\u003ccode\u003eab92638\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2031\"\u003e#2031\u003c/a\u003e from StellaHuang95/stellahuang/tsa-2816219-flawfinde...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/12bd4fef7ea5c35248d9f175f5b0218b970fa64c\"\u003e\u003ccode\u003e12bd4fe\u003c/code\u003e\u003c/a\u003e Return evaluate result in DAP response body instead of writing to stdout (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2027\"\u003e#2027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/8bd57a7d446d6ec4d7dd4e580d00cdea193ddcd9\"\u003e\u003ccode\u003e8bd57a7\u003c/code\u003e\u003c/a\u003e Prevent invalid scopes request from crashing debug session (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2026\"\u003e#2026\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/bf118c8d0ec97e584d2f3cfd781f04a745a1334c\"\u003e\u003ccode\u003ebf118c8\u003c/code\u003e\u003c/a\u003e Skip uninitialized \u003cstrong\u003eslots\u003c/strong\u003e in variable resolver (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2024\"\u003e#2024\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/a55be0e6f0700646e0833097ab78b2e4ba68745b\"\u003e\u003ccode\u003ea55be0e\u003c/code\u003e\u003c/a\u003e Potential fix when \u003ccode\u003e-c\u003c/code\u003e arguments are bytes instead of a str (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2021\"\u003e#2021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/debugpy/commit/0f037adec6fb2f61ad225849e953188ec349adbc\"\u003e\u003ccode\u003e0f037ad\u003c/code\u003e\u003c/a\u003e Fix evaluation of variables from chained exception frames (\u003ca href=\"https://redirect.github.com/microsoft/debugpy/issues/2018\"\u003e#2018\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/microsoft/debugpy/compare/v1.8.20...v1.8.21\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `decorator` from 5.2.1 to 5.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/micheles/decorator/blob/master/CHANGES.md\"\u003edecorator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.3.1 (2026-05-18)\u003c/h2\u003e\n\u003cp\u003eAdded license SPDX identifier to pyproject.toml (reported by\nChristian Lackas).\u003c/p\u003e\n\u003ch2\u003e5.3.0 (2026-05-17)\u003c/h2\u003e\n\u003cp\u003eAdded official support for Python 3.14 (thanks to Hugo van Kemenade,\nDavid Cain and the GitHub user bersbersbers).\nFixed a bug with \u0026quot;return await\u0026quot; contributed by Kadir Can Ozden.\nMoved decorator.py to a package structure (\u003ccode\u003edecorator/__init__.py\u003c/code\u003e) and\nadded a stub file (\u003ccode\u003edecorator/__init__.pyi\u003c/code\u003e) contributed by Marco Gorelli.\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/micheles/decorator/commit/426e9e35d563ffe356e54bd0f970d153b8f25370\"\u003e\u003ccode\u003e426e9e3\u003c/code\u003e\u003c/a\u003e Bumped the version to 5.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/062ff0e0c33733f2148a5590d118a8570df846d5\"\u003e\u003ccode\u003e062ff0e\u003c/code\u003e\u003c/a\u003e Fixed the dependency on setuptools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/086ff5d95d4dc550117c12647a4427d70bf8833d\"\u003e\u003ccode\u003e086ff5d\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/5807a83ead31f0de5303fa950ddea49d850d7355\"\u003e\u003ccode\u003e5807a83\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/093aced11439251e496b47a9a9369501075e8d1a\"\u003e\u003ccode\u003e093aced\u003c/code\u003e\u003c/a\u003e Updated changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/e9ced7e63ad9502b3e2a3e3db5f5f1ccc16c5fd6\"\u003e\u003ccode\u003ee9ced7e\u003c/code\u003e\u003c/a\u003e Added license SPDX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/b3e82ddc04e8d0c18c51eecb30b4a59aee5aac1d\"\u003e\u003ccode\u003eb3e82dd\u003c/code\u003e\u003c/a\u003e Fixed CHANGES.md [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/f1ce8da8522193421436c368849afe886666b4e5\"\u003e\u003ccode\u003ef1ce8da\u003c/code\u003e\u003c/a\u003e Doc fix [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/c924d7c6aa2e47a0627706c385101ff8d558d091\"\u003e\u003ccode\u003ec924d7c\u003c/code\u003e\u003c/a\u003e Updated supported versions [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/8b83e8cca35f5c773654ce4ae89b4e3f84f430d3\"\u003e\u003ccode\u003e8b83e8c\u003c/code\u003e\u003c/a\u003e Fixed CHANGES [ci skip]\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/micheles/decorator/compare/5.2.1...5.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `duckdb` 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/duckdb/duckdb-python/releases\"\u003educkdb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.3 Bugfix Release\u003c/h2\u003e\n\u003cp\u003eSee the DuckDB core release notes here: \u003ca href=\"https://github.com/duckdb/duckdb/releases/tag/v1.5.3\"\u003ehttps://github.com/duckdb/duckdb/releases/tag/v1.5.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed in DuckDB Python\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExport all symbols by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/445\"\u003educkdb/duckdb-python#445\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix concjunction OR by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/465\"\u003educkdb/duckdb-python#465\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse recursive mutex to deal with GIL \u0026lt;-\u0026gt; internal lock deadlocks by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/462\"\u003educkdb/duckdb-python#462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow self-joining of Polars lazyframes by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/466\"\u003educkdb/duckdb-python#466\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/duckdb/duckdb-python/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/duckdb/duckdb-python/commit/811b135ee5a0449378ab9635e0284b96485d58d6\"\u003e\u003ccode\u003e811b135\u003c/code\u003e\u003c/a\u003e DuckDB submodule pinned at v1.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/289bfbdc2914894ccbb41028a84abef34448126e\"\u003e\u003ccode\u003e289bfbd\u003c/code\u003e\u003c/a\u003e Bump submodule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/f87d6d938fca2d7b1ae713396e77c86622d17e79\"\u003e\u003ccode\u003ef87d6d9\u003c/code\u003e\u003c/a\u003e Allow self-joining of Polars lazyframes (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/466\"\u003e#466\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/c88229d86bf8e5ff266abc06cc620dc13d9d3529\"\u003e\u003ccode\u003ec88229d\u003c/code\u003e\u003c/a\u003e Allow self-joining of Polars lazyframes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/559f6af94b5c10e863b5e09b318c5c9f6d6c6dda\"\u003e\u003ccode\u003e559f6af\u003c/code\u003e\u003c/a\u003e Only disable unity builds for editable installs on OSX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/97df04987ffd69a0c5a94b4e8802b78c0302023e\"\u003e\u003ccode\u003e97df049\u003c/code\u003e\u003c/a\u003e fix .clangd\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/fd8889e3024da05d7afe90f4e20d6b9bd2b3e9c0\"\u003e\u003ccode\u003efd8889e\u003c/code\u003e\u003c/a\u003e Use recursive mutex to deal with GIL \u0026lt;-\u0026gt; internal lock deadlocks (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/462\"\u003e#462\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/7b77328d1bbcf1a95726c332a47eb8ca817222c4\"\u003e\u003ccode\u003e7b77328\u003c/code\u003e\u003c/a\u003e [duckdb-labs bot] Bump DuckDB submodule (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/9a866338302f8b7d31acde303cec9e3238cb2874\"\u003e\u003ccode\u003e9a86633\u003c/code\u003e\u003c/a\u003e Fix concjunction OR (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/3d778deea42aab1eccce0693538805b9d6183b44\"\u003e\u003ccode\u003e3d778de\u003c/code\u003e\u003c/a\u003e Fix concjunction OR\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duckdb/duckdb-python/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 `flask-cors` from 6.0.2 to 6.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/corydolphin/flask-cors/releases\"\u003eflask-cors's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDerive package version from git tag via setuptools-scm by \u003ca href=\"https://github.com/corydolphin\"\u003e\u003ccode\u003e@​corydolphin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/pull/405\"\u003ecorydolphin/flask-cors#405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CI/CD security with least privilege and build separation by \u003ca href=\"https://github.com/corydolphin\"\u003e\u003ccode\u003e@​corydolphin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/pull/406\"\u003ecorydolphin/flask-cors#406\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.3\"\u003ehttps://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e6.0.3-pre\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDerive package version from git tag via setuptools-scm by \u003ca href=\"https://github.com/corydolphin\"\u003e\u003ccode\u003e@​corydolphin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/pull/405\"\u003ecorydolphin/flask-cors#405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CI/CD security with least privilege and build separation by \u003ca href=\"https://github.com/corydolphin\"\u003e\u003ccode\u003e@​corydolphin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/pull/406\"\u003ecorydolphin/flask-cors#406\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.3\"\u003ehttps://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.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/corydolphin/flask-cors/commit/c8e8871076c7ed378eb0ae773a2079b6d62ed7a9\"\u003e\u003ccode\u003ec8e8871\u003c/code\u003e\u003c/a\u003e Harden release publishing workflow (\u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/issues/406\"\u003e#406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/corydolphin/flask-cors/commit/e1d4034e2b2d5232f6fed27bc753f90331747b64\"\u003e\u003ccode\u003ee1d4034\u003c/code\u003e\u003c/a\u003e Derive package version from git tag via setuptools-scm (\u003ca href=\"https://redirect.github.com/corydolphin/flask-cors/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/corydolphin/flask-cors/compare/6.0.2...6.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\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-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.5.1\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.1 (2026-05-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd preliminary support for Python 3.15b1. This has not been\nreviewed by CPython core developers, but all tests pass. Binary\nwheels of this version won't work on earlier Python 3.15 builds and\nmay not work on later 3.15 builds.\u003c/li\u003e\n\u003cli\u003eFix the discrepancy in the way the two \u003ccode\u003egetcurrent\u003c/code\u003e APIs behave\nduring greenlet teardown. One API (the C API used by, e.g.,  gevent) raised a\n\u003ccode\u003eRuntimeError\u003c/code\u003e; the other (the Python \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e API)\nreturned \u003ccode\u003eNone\u003c/code\u003e. This second way is incompatible with greenlet's type\nannotations, so \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e now raises a\n\u003ccode\u003eRuntimeError\u003c/code\u003e as well.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.0 (2026-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the \u003ccode\u003eatexit\u003c/code\u003e callback. This callback caused greenlet APIs\nto become unavailable far too soon during interpreter shutdown. Now\nthey remain available while all \u003ccode\u003eatexit\u003c/code\u003e callbacks run. Sometime\nafter \u003ccode\u003ePy_IsFinalizing\u003c/code\u003e becomes true, they may begin misbehaving.\nBecause the order in which C extensions are finalized is undefined,\nC extensions that are sensitive to this need to check the results of\nthat function before invoking greenlet APIs. As a convenience,\n\u003ccode\u003ePyGreenlet_GetCurrent\u003c/code\u003e sets an exception and returns \u003ccode\u003eNULL\u003c/code\u003e\nwhen this happens (and \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e begins returning\n\u003ccode\u003eNone\u003c/code\u003e); other greenlet C API functions have undefined behaviour.\nMethods invoked directly on pre-existing \u003ccode\u003egreenlet.greenlet\u003c/code\u003e\nobjects will continue to function at least until the greenlet C\nextension has been garbage collected and finalized.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 508 \u0026lt;https://github.com/python-greenlet/greenlet/pull/508\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\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/python-greenlet/greenlet/commit/b5e5fc43a51c27ecffa1b1c7107c91464a6b26e2\"\u003e\u003ccode\u003eb5e5fc4\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c8e177413d34bc36ed56d2c185c232ab0538be90\"\u003e\u003ccode\u003ec8e1774\u003c/code\u003e\u003c/a\u003e Tweak wording in CHANGES about greenlet.getcurrent.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/7fb10c570f37b3eb4c8909c6164fdfac3269ddb6\"\u003e\u003ccode\u003e7fb10c5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/510\"\u003e#510\u003c/a\u003e from python-greenlet/315\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/9718ce5a23ea3360232b78a806a837d6c3d6183d\"\u003e\u003ccode\u003e9718ce5\u003c/code\u003e\u003c/a\u003e Add Py 3.15; make both API versions of getcurrent() consistent in raising Run...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/276e08afc4ddba87e4366390e3eeaecd61ccb3b8\"\u003e\u003ccode\u003e276e08a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/509\"\u003e#509\u003c/a\u003e from python-greenlet/dependabot/github_actions/github...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/32b0ad69828eb69d879c70dbee948e685268901b\"\u003e\u003ccode\u003e32b0ad6\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/173b692dc84288ef41572612ac744754f98eaa90\"\u003e\u003ccode\u003e173b692\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c7acc72000572811d6462ebe01733a974f194990\"\u003e\u003ccode\u003ec7acc72\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/d08f99bf40801c5d57af6e13631c0ba68300ecf7\"\u003e\u003ccode\u003ed08f99b\u003c/code\u003e\u003c/a\u003e CHANGES: Update link from \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/507\"\u003e#507\u003c/a\u003e to more full description in \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/fd3391e33cedc7a17a86059f18dfbec2b3a320bd\"\u003e\u003ccode\u003efd3391e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e from python-greenlet/issue507-remove-atexit\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.5.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.11 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.11...v3.18\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 9.12.0 to 9.14.1\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/352c35b9e841fe20c2a0dc09af67e180e6854322\"\u003e\u003ccode\u003e352c35b\u003c/code\u003e\u003c/a\u003e release 9.14.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/df72b1f8d94e874947f6425dbbcca614942aa3f5\"\u003e\u003ccode\u003edf72b1f\u003c/code\u003e\u003c/a\u003e Add forward compatibility for pdb.Pdb's mode argument (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15235\"\u003e#15235\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/a957d81c3177d33fc9d0b5fe123e58dd8cbf87e7\"\u003e\u003ccode\u003ea957d81\u003c/code\u003e\u003c/a\u003e Handle pdb.Pdb \u003ccode\u003emode\u003c/code\u003e argument and test signature compatibility\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/3e1c0544e141d55cd232259d4828a633e952f5fc\"\u003e\u003ccode\u003e3e1c054\u003c/code\u003e\u003c/a\u003e ci: add zizmor GitHub Actions security analysis and harden workflows (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15238\"\u003e#15238\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0181ae38b68b929f464c349ad139e1080ee60a93\"\u003e\u003ccode\u003e0181ae3\u003c/code\u003e\u003c/a\u003e ci: add zizmor GitHub Actions security analysis and harden workflows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/fb831cc06fe27a12f5d52f6608fa90857428748c\"\u003e\u003ccode\u003efb831cc\u003c/code\u003e\u003c/a\u003e back to dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/9d1f24b9687279362b66f4e8c8a36ffde895a05d\"\u003e\u003ccode\u003e9d1f24b\u003c/code\u003e\u003c/a\u003e release 9.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d8b9d11f2796300d914a88dc08de35ce93bc5aa0\"\u003e\u003ccode\u003ed8b9d11\u003c/code\u003e\u003c/a\u003e Add IPython 9.14 release notes (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15228\"\u003e#15228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/80cc1b963349ebc472b69f7da505cccebb2e6ad5\"\u003e\u003ccode\u003e80cc1b9\u003c/code\u003e\u003c/a\u003e Apply suggestions from code review\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/99feaadc543d43abc9287734651f4b618305a6bb\"\u003e\u003ccode\u003e99feaad\u003c/code\u003e\u003c/a\u003e Prepare release notes for 9.14\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/9.12.0...9.14.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jedi` from 0.19.2 to 0.20.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.20.0 (2026-05-02)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.14 support\u003c/li\u003e\n\u003cli\u003eRemoved support for Python 3.8 and 3.9\u003c/li\u003e\n\u003cli\u003eUpgraded Typeshed\u003c/li\u003e\n\u003cli\u003eBetter support for Final/ClassVar\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__new__\u003c/code\u003e is now also recognized as a signature and TypeVar inference\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eSelf\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eTypeAlias\u003c/code\u003e, generics for \u003ccode\u003etype[...]\u003c/code\u003e and \u003ccode\u003etuple[...]\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/davidhalter/jedi/commit/3102215478fe07b965dcd8221c17436d1dd7e8ac\"\u003e\u003ccode\u003e3102215\u003c/code\u003e\u003c/a\u003e Move the type parameter syntax tests so that it works for all versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/1b37f2eb946e825cbc2887c6dd34ee046f0ae68c\"\u003e\u003ccode\u003e1b37f2e\u003c/code\u003e\u003c/a\u003e Prepare for the 0.20.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8e4df5cc0ec511db1af6d358182b1fb7c1e0cbff\"\u003e\u003ccode\u003e8e4df5c\u003c/code\u003e\u003c/a\u003e Make sure the new generic syntax does not fail with latest parso\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4c9dbcca0329454b638bfa32e2825bedcfdf0eac\"\u003e\u003ccode\u003e4c9dbcc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2098\"\u003e#2098\u003c/a\u003e from davidhalter/updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/fedb1a5eb0d74446f6d431db2920ab5f1e1d5b18\"\u003e\u003ccode\u003efedb1a5\u003c/code\u003e\u003c/a\u003e Fix 3.10 tests in one more case\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/87e782f9c82de7297e243a770ac8888570bffa8e\"\u003e\u003ccode\u003e87e782f\u003c/code\u003e\u003c/a\u003e Fix flake8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/cd52d982e10ac54f0ebef06e0bd414f79589998a\"\u003e\u003ccode\u003ecd52d98\u003c/code\u003e\u003c/a\u003e Fixes to get the tests passing for 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/d0b11806d4d1def377234bc2dc512992c997a977\"\u003e\u003ccode\u003ed0b1180\u003c/code\u003e\u003c/a\u003e Finally make tests work for 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8520a9958b489bd8d30cf20b4d2798f7289aab45\"\u003e\u003ccode\u003e8520a99\u003c/code\u003e\u003c/a\u003e Implement support for TypeVar inference for \u003cstrong\u003enew\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/55e5f0cb92dd92d5bdc80ecfc38664a1afd921d1\"\u003e\u003ccode\u003e55e5f0c\u003c/code\u003e\u003c/a\u003e Implement new-style unions with TypeVars\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.2...v0.20.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `joserfc` from 1.6.4 to 1.7.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/authlib/joserfc/releases\"\u003ejoserfc's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.7.1\u003c/h2\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ejwe\u003c/strong\u003e: When decrypt, use the original aad base64 value  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/d6a3d15\"\u003e\u003c!-- raw HTML omitted --\u003e(d6a3d)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/authlib/joserfc/compare/1.7.0...1.7.1\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003ch2\u003e1.7.0\u003c/h2\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ejwk\u003c/strong\u003e: As_dict, as_pem, as_der export public key by default  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/382b39d\"\u003e\u003c!-- raw HTML omitted --\u003e(382b3)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etyping\u003c/strong\u003e: Update type hints for dropping python 3.9  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/1ddca8f\"\u003e\u003c!-- raw HTML omitted --\u003e(1ddca)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etyping\u003c/strong\u003e: Use Iterator for _filter_keys_by_parameters return value  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/c133016\"\u003e\u003c!-- raw HTML omitted --\u003e(c1330)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.7...1.7.0\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003ch2\u003e1.6.9\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWE\u003c/strong\u003e: use the original base64 \u003ccode\u003eaad\u003c/code\u003e when decrypt.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.8...1.6.9\"\u003ehttps://github.com/authlib/joserfc/compare/1.6.8...1.6.9\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.6.8\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty OctKey.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.7...1.6.8\"\u003ehttps://github.com/authlib/joserfc/compare/1.6.7...1.6.8\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e1.6.7\u003c/h2\u003e\n\u003ch3\u003e   🐞 Bug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003ejws\u003c/strong\u003e: Validate payload size for b64=false  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/4d4ea2e\"\u003e\u003c!-- raw HTML omitted --\u003e(4d4ea)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etyping\u003c/strong\u003e: Accept any Collection for algorithms, not just list  -  by \u003ca href=\"https://github.com/jonathangreen\"\u003e\u003ccode\u003e@​jonathangreen\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/102a7a7\"\u003e\u003c!-- raw HTML omitted --\u003e(102a7)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003etyping\u003c/strong\u003e: Use cast for type hints  -  by \u003ca href=\"https://github.com/lepture\"\u003e\u003ccode\u003e@​lepture\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://github.com/authlib/joserfc/commit/75d9f95\"\u003e\u003c!-- raw HTML omitted --\u003e(75d9f)\u003c!-- raw HTML omitted --\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.5...1.6.7\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003ch2\u003e1.6.5\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003eNo significant changes\u003c/em\u003e\u003c/p\u003e\n\u003ch5\u003e    \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.4...1.6.5\"\u003eView changes on GitHub\u003c/a\u003e\u003c/h5\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/authlib/joserfc/blob/main/docs/changelog.rst\"\u003ejoserfc's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.7.1\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on June 8, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWE\u003c/strong\u003e: use the original \u003ccode\u003eaad\u003c/code\u003e value for decrypting.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.7.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on June 2, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDrop Python 3.9 support.\u003c/li\u003e\n\u003cli\u003eUpdate type hints.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJWK\u003c/strong\u003e: export public key by default in \u003ccode\u003e.as_dict\u003c/code\u003e, \u003ccode\u003e.as_pem\u003c/code\u003e, \u003ccode\u003e.as_der\u003c/code\u003e methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.9\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on June 8, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWE\u003c/strong\u003e: use the original \u003ccode\u003eaad\u003c/code\u003e value for decrypting.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.8\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 27, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eReject empty OctKey.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.7\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 23, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate for type hints.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.6\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 18, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWS\u003c/strong\u003e: validate payload size when \u003ccode\u003eb64=false\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e1.6.5\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eReleased on May 3, 2026\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eJWS\u003c/strong\u003e: increase registry's payload max size.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/51aef508022a4cc61a34d57b8862fb46049c9203\"\u003e\u003ccode\u003e51aef50\u003c/code\u003e\u003c/a\u003e chore: release 1.7.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/d6a3d15139edff276a06f1c1ebb4d16a069642ab\"\u003e\u003ccode\u003ed6a3d15\u003c/code\u003e\u003c/a\u003e fix(jwe): when decrypt, use the original aad base64 value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/3c9efedc9488244a47e9792235e02983df14b5ff\"\u003e\u003ccode\u003e3c9efed\u003c/code\u003e\u003c/a\u003e chore: release 1.7.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/da5dba115da1a8513c2a0a34f9c0171db1d3dc33\"\u003e\u003ccode\u003eda5dba1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/authlib/joserfc/issues/100\"\u003e#100\u003c/a\u003e from authlib/export-public\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/382b39dc0b8bfcf50222e7d2ba4d66d64f55add7\"\u003e\u003ccode\u003e382b39d\u003c/code\u003e\u003c/a\u003e fix(jwk): as_dict, as_pem, as_der export public key by default\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/955aaa05183770fa761326e3a4ea2bfe1d836d28\"\u003e\u003ccode\u003e955aaa0\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/c133016e7e5b1d11732d18625be3da78308d267e\"\u003e\u003ccode\u003ec133016\u003c/code\u003e\u003c/a\u003e fix(typing): use Iterator for _filter_keys_by_parameters return value\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/dbb26fcbd98e67aa5f9ce32e62e8a8de8925ace5\"\u003e\u003ccode\u003edbb26fc\u003c/code\u003e\u003c/a\u003e Reject empty oct key material and empty HMAC keys at sign/verify entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/1ddca8f3c73ff47e3bc3ac06cb0c08a9535677ec\"\u003e\u003ccode\u003e1ddca8f\u003c/code\u003e\u003c/a\u003e fix(typing): update type hints for dropping python 3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/authlib/joserfc/commit/fe1d746e7e85e523084b2aa5a269fb111c40f099\"\u003e\u003ccode\u003efe1d746\u003c/code\u003e\u003c/a\u003e chore: drop python 3.9\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/authlib/joserfc/compare/1.6.4...1.7.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jupyter-client` from 8.8.0 to 8.9.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/jupyter/jupyter_client/releases\"\u003ejupyter-client's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.9.0\u003c/h2\u003e\n\u003ch2\u003e8.9.0\u003c/h2\u003e\n\u003cp\u003e(\u003ca href=\"https://github.com/jupyter/jupyter_client/compare/v8.8.0...d67bf2015d256bac3b766b2a673e980dcc169eac\"\u003eFull Changelog\u003c/a\u003e)\u003c/p\u003e\n\u003ch3\u003eEnhancements made\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ZMQ Curve for transport encryption \u003ca href=\"https://redirect.github.com/jupyter/jupyter_client/pull/1110\"\u003e#1110\u003c/a\u003e (\u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/minrk\"\u003e\u003ccode\u003e@​minrk\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eMaintenance and upkeep improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTemporarily pin Python to 3.14 in pre-releases test \u003ca href=\"https://redirect.github.com/jupyter/jupyter_client/pull/1118\"\u003e#1118\u003c/a\u003e (\u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCI: fix testing of nbconvert \u003ca href=\"https://redirect.github.com/jupyter/jupyter_client/pull/1116\"\u003e#1116\u003c/a\u003e (\u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate pre-commit, and fix issues \u003ca href=\"https://redirect.github.com/jupyter/jupyter_client/pull/1115\"\u003e#1115\u003c/a\u003e (\u003ca href=\"https://github.com/Carreau\"\u003e\u003ccode\u003e@​Carreau\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/krassowski\"\u003e\u003ccode\u003e@​krassowski\u003c/code\u003e\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove \u003ccode\u003e3.14t\u003c/code\u003e testing until \u003ccode\u003emsgpack\u003c/code\u003e supports it \u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/naguht060/TradeNeuron/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/naguht060%2FTradeNeuron/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"}},{"old_version":"7.1.3","new_version":"7.1.4","update_type":"patch","path":null,"pr_created_at":"2026-06-07T04:33:29.000Z","version_change":"7.1.3 → 7.1.4","issue":{"uuid":"4606167189","node_id":"PR_kwDOSXLGM87jkUY4","number":17,"state":"closed","title":"chore(deps): bump the uv-dependencies group across 1 directory with 26 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-14T04:29:57.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-07T04:33:29.000Z","updated_at":"2026-06-14T04:29:59.000Z","time_to_close":604588,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv-dependencies","update_count":26,"packages":[{"name":"apprise","old_version":"1.10.0","new_version":"1.11.0","repository_url":"https://github.com/caronc/apprise"},{"name":"click","old_version":"8.4.0","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"cyclopts","old_version":"4.15.0","new_version":"4.16.1","repository_url":"https://github.com/BrianPugh/cyclopts"},{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"opentelemetry-api","old_version":"1.41.1","new_version":"1.42.1","repository_url":"https://github.com/open-telemetry/opentelemetry-python"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.49.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydocket","old_version":"0.20.3","new_version":"0.21.1","repository_url":"https://github.com/chrisguidry/docket"},{"name":"uv","old_version":"0.11.15","new_version":"0.11.19","repository_url":"https://github.com/astral-sh/uv"},{"name":"prefect-shell","old_version":"0.3.5","new_version":"0.3.6","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"prefect-dask","old_version":"0.3.6","new_version":"0.3.7","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"prefect-github","old_version":"0.4.2","new_version":"0.4.3","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"prefect-dbt","old_version":"0.7.24","new_version":"0.7.25","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"prefect-snowflake","old_version":"0.28.7","new_version":"0.28.8","repository_url":"https://github.com/PrefectHQ/prefect"},{"name":"moto","old_version":"5.2.1","new_version":"5.2.2","repository_url":"https://github.com/getmoto/moto"},{"name":"pyright","old_version":"1.1.409","new_version":"1.1.410","repository_url":"https://github.com/RobertCraigie/pyright-python"},{"name":"redis","old_version":"7.4.0","new_version":"8.0.0","repository_url":"https://github.com/redis/redis-py"},{"name":"virtualenv","old_version":"21.3.3","new_version":"21.4.2","repository_url":"https://github.com/pypa/virtualenv"},{"name":"ruff","old_version":"0.15.14","new_version":"0.15.16","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-dependencies group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [apprise](https://github.com/caronc/apprise) | `1.10.0` | `1.11.0` |\n| [click](https://github.com/pallets/click) | `8.4.0` | `8.4.1` |\n| [cyclopts](https://github.com/BrianPugh/cyclopts) | `4.15.0` | `4.16.1` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.3` | `7.1.4` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [opentelemetry-api](https://github.com/open-telemetry/opentelemetry-python) | `1.41.1` | `1.42.1` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.49.0` |\n| [pydocket](https://github.com/chrisguidry/docket) | `0.20.3` | `0.21.1` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.15` | `0.11.19` |\n| [prefect-shell](https://github.com/PrefectHQ/prefect) | `0.3.5` | `0.3.6` |\n| [prefect-dask](https://github.com/PrefectHQ/prefect) | `0.3.6` | `0.3.7` |\n| [prefect-github](https://github.com/PrefectHQ/prefect) | `0.4.2` | `0.4.3` |\n| [prefect-dbt](https://github.com/PrefectHQ/prefect) | `0.7.24` | `0.7.25` |\n| [prefect-snowflake](https://github.com/PrefectHQ/prefect) | `0.28.7` | `0.28.8` |\n| [moto](https://github.com/getmoto/moto) | `5.2.1` | `5.2.2` |\n| [pyright](https://github.com/RobertCraigie/pyright-python) | `1.1.409` | `1.1.410` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.0.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.3.3` | `21.4.2` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.16` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n\n\nUpdates `apprise` from 1.10.0 to 1.11.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/caronc/apprise/releases\"\u003eapprise's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.11.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eA big win for this release is priortization of grouped/tagged content. Basically, this release allows you to tag multiple items and provide a weight to them.   Apprise will attempt to notify the highest priority/weighted services first (of same level), and only if this level fails will it try the next.  Tagging is no longer just a \u003ccode\u003etag\u003c/code\u003e.  It's now \u003ccode\u003eweight:tag\u003c/code\u003e too;  for example \u003ccode\u003e100:friends\u003c/code\u003e  associates the weight of \u003ccode\u003e100\u003c/code\u003e with the tag \u003ccode\u003efriends\u003c/code\u003e.  You can still continue to notify friends with your Apprise calls, but if there are weight categories, then these will be factored into the order.  Highest priority (weighted) tags have a lower integer value (zero being the  higest priority).  Only the next priority will be notified if the first fails.\u003c/p\u003e\n\u003cp\u003eThis releae also allows you to set up a notifiation service to gracefully fail and not have Apprise itself report a failure.  This is useful for situations where you notify several end points and you really don't care if they're unavailable or not.   Apprise wil do it's usual best effort to send the notification, but not treat it as a failure if it can't get through. Use \u003ccode\u003eoptional=yes\u003c/code\u003e on your Apprise URL.\u003c/p\u003e\n\u003cp\u003eThirdly, this release introduces retries! You can now have Apprise attempt to notify your endpoint a second, or a third, (up to 10x) tries before giving up and deeming it unable to send the notification.  Use \u003ccode\u003eretry=X\u003c/code\u003e on your Apprise URL\u003c/p\u003e\n\u003ch3\u003e:mega: New Notification Services:\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded Zoom (Incoming Webhook) Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1596\"\u003ecaronc/apprise#1596\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded WeChat Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1598\"\u003ecaronc/apprise#1598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRingCentral Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/878\"\u003ecaronc/apprise#878\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSession Open Group Server Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1615\"\u003ecaronc/apprise#1615\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded HumHub Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1623\"\u003ecaronc/apprise#1623\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAmazon Chime Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1627\"\u003ecaronc/apprise#1627\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGroupMe Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1629\"\u003ecaronc/apprise#1629\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:lady_beetle:  Bugfixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimproved robustness of windows test cases preventing others from passing in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1609\"\u003ecaronc/apprise#1609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle XMPP SASL SCRAM-PLUS / Channel Binding in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1619\"\u003ecaronc/apprise#1619\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTRACE logging during apprise init cleaned up in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1622\"\u003ecaronc/apprise#1622\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efixed mastodon error: AttributeError -  'list' object has no attribute 'union' in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1631\"\u003ecaronc/apprise#1631\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:bulb: Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eo365:// saveToSentItems configurable - ?savesent=no in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1599\"\u003ecaronc/apprise#1599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdated WhatsApp Buisness Graph API to v21 in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1603\"\u003ecaronc/apprise#1603\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:fire: Built in retries, escalations, priorities, and optional service calls in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1601\"\u003ecaronc/apprise#1601\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSlack Template/Payload support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1604\"\u003ecaronc/apprise#1604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded Slack workflows and trigger support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1605\"\u003ecaronc/apprise#1605\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:rocket: Pushover E2EE Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1612\"\u003ecaronc/apprise#1612\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWKD support added to email plugin in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1614\"\u003ecaronc/apprise#1614\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1618\"\u003ecaronc/apprise#1618\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAmazon SNS/SES Improvements in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1620\"\u003ecaronc/apprise#1620\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNotifico Standalone Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1275\"\u003ecaronc/apprise#1275\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:heart: Life-Cycle Support\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate LoC badge by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1593\"\u003ecaronc/apprise#1593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTwitter/X migration to API v2 in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1607\"\u003ecaronc/apprise#1607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eimprovements to workflow:// based on recent slack:// changes in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1608\"\u003ecaronc/apprise#1608\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:unlock: Added redirect= for allowing url redirection control in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1610\"\u003ecaronc/apprise#1610\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003emqtt:// now depends on paho-mqtt v2.1.0+ in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1613\"\u003ecaronc/apprise#1613\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:skull: Retire msteams:// as it is no longer in service upstream in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1625\"\u003ecaronc/apprise#1625\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstallation\u003c/h2\u003e\n\u003cp\u003eApprise is available \u003ca href=\"https://pypi.org/project/apprise/\"\u003eon PyPI\u003c/a\u003e through \u003cem\u003epip\u003c/em\u003e:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e# Install Apprise v1.11.0 from PyPI\r\npip install apprise==1.11.0\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/caronc/apprise/commit/158c4e1febc3e6093b0f357776b315a90c8a89b5\"\u003e\u003ccode\u003e158c4e1\u003c/code\u003e\u003c/a\u003e bumped version to v1.11.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/21db421ee89b24f1716a4fce74a4404a94bbabe7\"\u003e\u003ccode\u003e21db421\u003c/code\u003e\u003c/a\u003e GroupMe Support Added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1629\"\u003e#1629\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/f1e4ad2fd6659529597b1e07a1e44192faebff54\"\u003e\u003ccode\u003ef1e4ad2\u003c/code\u003e\u003c/a\u003e fixed mastodon error: AttributeError - 'list' object has no attribute 'union'...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/e17fe9dd64dd79e373877cf8ee07595cc50a01cc\"\u003e\u003ccode\u003ee17fe9d\u003c/code\u003e\u003c/a\u003e Amazon Chime Support (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1627\"\u003e#1627\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/dfdac59c9945385c4c75613e57d19558ec995d50\"\u003e\u003ccode\u003edfdac59\u003c/code\u003e\u003c/a\u003e HumHub Support added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1623\"\u003e#1623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/9de0397c30a7a2e58eb57c8da995ec54eada80bc\"\u003e\u003ccode\u003e9de0397\u003c/code\u003e\u003c/a\u003e Notifico Standalone Support Added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/c3e67e61d35a1b0609d176786db1e0b2cc1287da\"\u003e\u003ccode\u003ec3e67e6\u003c/code\u003e\u003c/a\u003e Retired msteams:// - as it is no longer in service upstream (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1625\"\u003e#1625\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/b463f23979455b61c548a550e40a3c75f0191b30\"\u003e\u003ccode\u003eb463f23\u003c/code\u003e\u003c/a\u003e TRACE logging during apprise init cleaned up (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1622\"\u003e#1622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/1e2fdeb72bd8165ad613b162794778ff1c684e67\"\u003e\u003ccode\u003e1e2fdeb\u003c/code\u003e\u003c/a\u003e Amazon SNS/SES Improvements (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1620\"\u003e#1620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/4706d0a4599a5072c8ae17375ee81862bcaac460\"\u003e\u003ccode\u003e4706d0a\u003c/code\u003e\u003c/a\u003e Handle XMPP SASL SCRAM-PLUS / Channel Binding (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1619\"\u003e#1619\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/caronc/apprise/compare/v1.10.0...v1.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.0 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\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.1\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-21\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eget_parameter_source()\u003c/code\u003e is available during eager callbacks and type\nconversion again. {issue}\u003ccode\u003e3458\u003c/code\u003e {pr}\u003ccode\u003e3484\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eZsh completion scripts parse correctly on Windows. {issue}\u003ccode\u003e3277\u003c/code\u003e {pr}\u003ccode\u003e3466\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eShell completion of \u003ccode\u003eEnum\u003c/code\u003e values used as \u003ccode\u003eChoice\u003c/code\u003e options produces a\nvalid completion result. {issue}\u003ccode\u003e3015\u003c/code\u003e {pr}\u003ccode\u003e3471\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. {issue}\u003ccode\u003e3487\u003c/code\u003e {pr}\u003ccode\u003e3493\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix closed file error with \u003ccode\u003eecho_via_pager\u003c/code\u003e. {issue}\u003ccode\u003e3449\u003c/code\u003e {pr}\u003ccode\u003e3482\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eopen_url\u003c/code\u003e on Windows when the file path contains spaces.\n{issue}\u003ccode\u003e2994\u003c/code\u003e {pr}\u003ccode\u003e3478\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/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.4.0...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cyclopts` from 4.15.0 to 4.16.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/BrianPugh/cyclopts/releases\"\u003ecyclopts's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.16.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix fish completion for positional args and run fish tests in ci by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/823\"\u003eBrianPugh/cyclopts#823\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix zsh completion recursion when \u003ccode\u003eprog_name\u003c/code\u003e matches a builtin helper by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/825\"\u003eBrianPugh/cyclopts#825\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd ubuntu-24.04-arm to the CI testing matrix by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/822\"\u003eBrianPugh/cyclopts#822\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add missing typer Option imports in flag negation examples by \u003ca href=\"https://github.com/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/824\"\u003eBrianPugh/cyclopts#824\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/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/824\"\u003eBrianPugh/cyclopts#824\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.16.0...v4.16.1\"\u003ehttps://github.com/BrianPugh/cyclopts/compare/v4.16.0...v4.16.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.16.0\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReturn-value objects can now declare their own exit code by defining a \u003ccode\u003e__cyclopts_returncode__\u003c/code\u003e method, which is honored by all built-in \u003ccode\u003eresult_action\u003c/code\u003e handlers. Custom \u003ccode\u003eresult_action\u003c/code\u003e callables can opt in via the new \u003ccode\u003ecyclopts.resolve_returncode\u003c/code\u003e helper. By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/818\"\u003eBrianPugh/cyclopts#818\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0692/\"\u003ePEP 692\u003c/a\u003e support: when \u003ccode\u003e**kwargs\u003c/code\u003e is annotated as \u003ccode\u003eUnpack[SomeTypedDict]\u003c/code\u003e, the TypedDict's fields are promoted to top-level CLI options instead of the generic \u003ccode\u003e--[KEYWORD]\u003c/code\u003e catch-all. Per-field \u003ccode\u003eRequired\u003c/code\u003e / \u003ccode\u003eNotRequired\u003c/code\u003e markers are respected independently of the parent kwargs argument. By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/819\"\u003eBrianPugh/cyclopts#819\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCycloptsError.msg\u003c/code\u003e now accepts a \u003ccode\u003erich.Text\u003c/code\u003e instance. Cyclopts' error-message style palette is exposed as \u003ccode\u003ecyclopts.exceptions.STYLE_OFFENDING_VALUE\u003c/code\u003e, \u003ccode\u003eSTYLE_NAME\u003c/code\u003e, \u003ccode\u003eSTYLE_VALID_CHOICE\u003c/code\u003e, \u003ccode\u003eSTYLE_SUGGESTION\u003c/code\u003e, and \u003ccode\u003eSTYLE_SOURCE\u003c/code\u003e . By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/814\"\u003eBrianPugh/cyclopts#814\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.0\"\u003ehttps://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.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/BrianPugh/cyclopts/commit/ea77abc99ef67dc4da21548d3b2ff2150c265afe\"\u003e\u003ccode\u003eea77abc\u003c/code\u003e\u003c/a\u003e fix zsh completion recursion when prog_name matches a builtin helper\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/e297647b12b71155d01f87e8e1d5e008c90962b6\"\u003e\u003ccode\u003ee297647\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/824\"\u003e#824\u003c/a\u003e from SAY-5/docs-fix-typer-option-import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/923a5648ed221c1f7683810851c4ade348149fa4\"\u003e\u003ccode\u003e923a564\u003c/code\u003e\u003c/a\u003e docs: add missing typer Option imports in flag negation examples\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/ddb9cc2ec53ad103a4525e399afa92188ac81ae3\"\u003e\u003ccode\u003eddb9cc2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/823\"\u003e#823\u003c/a\u003e from BrianPugh/fish-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/bd56e32b839d9b90e060b1fd88105985194887db\"\u003e\u003ccode\u003ebd56e32\u003c/code\u003e\u003c/a\u003e fix fish completion for positional args and run fish tests in ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/fba7293a546d7569f8cb74a85badc0a8f9401691\"\u003e\u003ccode\u003efba7293\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/822\"\u003e#822\u003c/a\u003e from BrianPugh/arm-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/17e22f16883a7132b9d9bc12dc18c16b726d8a73\"\u003e\u003ccode\u003e17e22f1\u003c/code\u003e\u003c/a\u003e skip global zsh rcs in completion tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/4cc78acd473f09d1e6267ed92f3ca24358c4b8cd\"\u003e\u003ccode\u003e4cc78ac\u003c/code\u003e\u003c/a\u003e install zsh in linux ci runs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/5c87c2752b494e9486f422d48473d206cd6ab66e\"\u003e\u003ccode\u003e5c87c27\u003c/code\u003e\u003c/a\u003e add ubuntu-24.04-arm to the CI testing matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/be2b4295f4632315ae1e49c8f3799bc71086a751\"\u003e\u003ccode\u003ebe2b429\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/819\"\u003e#819\u003c/a\u003e from BrianPugh/pep-692\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\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.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-api` from 1.41.1 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-api's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\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/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.41.1...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn` from 0.47.0 to 0.49.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.49.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump httptools minimum version to 0.8.0 by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2962\"\u003eKludex/uvicorn#2962\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in ProxyHeadersMiddleware (reverses the 0.48.0 behavior of ignoring them) by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2971\"\u003eKludex/uvicorn#2971\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.48.0...0.49.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\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.49.0 (June 3, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003ehttptools\u003c/code\u003e minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eConsume duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (reverses the 0.48.0 behavior of ignoring them) (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/3ef2e3e08e3d9ad9572800f8bc54f3eaed9eab0a\"\u003e\u003ccode\u003e3ef2e3e\u003c/code\u003e\u003c/a\u003e Version 0.49.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2973\"\u003e#2973\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/eeb64b1d1c95a14096ed3313377c74b485f558fc\"\u003e\u003ccode\u003eeeb64b1\u003c/code\u003e\u003c/a\u003e Consume duplicate forwarding headers in ProxyHeadersMiddleware (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2971\"\u003e#2971\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/630f4aca14e79183617c71be714030842a1041c5\"\u003e\u003ccode\u003e630f4ac\u003c/code\u003e\u003c/a\u003e Make the watchfiles reload tests deterministic (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2972\"\u003e#2972\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9154922e3730f7aba68ecc3ecbf536680ee8fd1c\"\u003e\u003ccode\u003e9154922\u003c/code\u003e\u003c/a\u003e chore(deps): bump the github-actions group across 1 directory with 6 updates ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/739727a1d80e468d1e47e98bbd824ee9e3c9554b\"\u003e\u003ccode\u003e739727a\u003c/code\u003e\u003c/a\u003e Migrate docs deploy from Cloudflare Pages to Workers (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2967\"\u003e#2967\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/be4a240488d3fb678a11b8e8f83505266f5f1de7\"\u003e\u003ccode\u003ebe4a240\u003c/code\u003e\u003c/a\u003e Gate docs preview deploy on Cloudflare token presence (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/c489d7e10dfe653a2bba914feedf2a632a026e6f\"\u003e\u003ccode\u003ec489d7e\u003c/code\u003e\u003c/a\u003e Bump httptools minimum version to 0.8.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2962\"\u003e#2962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/9f547bd82ef52bcba206e04170b359bd6daa25b3\"\u003e\u003ccode\u003e9f547bd\u003c/code\u003e\u003c/a\u003e Skip docs preview deploy for Dependabot PRs (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2961\"\u003e#2961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/44446b894e37ca76830d6aa83df4349795400ed4\"\u003e\u003ccode\u003e44446b8\u003c/code\u003e\u003c/a\u003e Migrate documentation from MkDocs Material to Zensical (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2959\"\u003e#2959\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/cfd659c4f18b526adce9c255c96707bab20af40c\"\u003e\u003ccode\u003ecfd659c\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions to 10.21.3 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2958\"\u003e#2958\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.49.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydocket` from 0.20.3 to 0.21.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chrisguidry/docket/releases\"\u003epydocket's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.21.1 - Eight misbehavin'\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eredis-py==8.0.0\u003c/code\u003e changed a default timeout that broke long-lived blocking connections (like pubsub and streams).  With this release, that's fixed and we support (and have tests for) redis-py 5.x, 6.x, 7.x, and 8.x\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport redis-py 8, and make CI actually exercise it by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/427\"\u003echrisguidry/docket#427\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.21.0...0.21.1\"\u003ehttps://github.com/chrisguidry/docket/compare/0.21.0...0.21.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.21.0 - Don't Call Me\u003c/h2\u003e\n\u003cp\u003eThis is a performance-tuning release focused on reducing how chatty Docket is with Redis, and folding several separate operations into single pipelines and scripts.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump idna from 3.11 to 3.15 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/chrisguidry/docket/pull/418\"\u003echrisguidry/docket#418\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pymdown-extensions from 10.21.2 to 10.21.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/chrisguidry/docket/pull/417\"\u003echrisguidry/docket#417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory 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/chrisguidry/docket/pull/416\"\u003echrisguidry/docket#416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache Lua scripts at module scope to skip per-call SHA work by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/419\"\u003echrisguidry/docket#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFold state PUBLISH into the per-task Lua scripts by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/420\"\u003echrisguidry/docket#420\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFold the rest of the task-completion path into _terminal by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/421\"\u003echrisguidry/docket#421\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePost-release review fixes for \u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/422\"\u003echrisguidry/docket#422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock in regression coverage for implicit invariants in the recent Lua refactor by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/423\"\u003echrisguidry/docket#423\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.20.3...0.21.0\"\u003ehttps://github.com/chrisguidry/docket/compare/0.20.3...0.21.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/chrisguidry/docket/commit/cfafd7e3d8b4dd20d237b237c2b4ce78dc69ad5b\"\u003e\u003ccode\u003ecfafd7e\u003c/code\u003e\u003c/a\u003e Support redis-py 8, and make CI actually exercise it (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/11ebbcd7731441c0460b00d41bdbaeb5072069bb\"\u003e\u003ccode\u003e11ebbcd\u003c/code\u003e\u003c/a\u003e Lock in regression coverage for implicit invariants in the recent Lua refacto...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/bf1fa2afc122968b6a0845e7b7edc5f112c0a79d\"\u003e\u003ccode\u003ebf1fa2a\u003c/code\u003e\u003c/a\u003e Post-release review fixes for \u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/422\"\u003e#422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/b82ef829c704d4a102b3e2b11fabf69d118e3673\"\u003e\u003ccode\u003eb82ef82\u003c/code\u003e\u003c/a\u003e Fold the rest of the task-completion path into _terminal (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/1cdb6dfffe8791684f3b0abe94751a54aaa8dc63\"\u003e\u003ccode\u003e1cdb6df\u003c/code\u003e\u003c/a\u003e Fold state PUBLISH into the per-task Lua scripts (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/e95be4a45bdf87cd4c67c9c9a5fd5db83d4c8136\"\u003e\u003ccode\u003ee95be4a\u003c/code\u003e\u003c/a\u003e Cache Lua scripts at module scope to skip per-call SHA work (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/718df97071c73b84ce9b6afcd49e51b75fcbe69f\"\u003e\u003ccode\u003e718df97\u003c/code\u003e\u003c/a\u003e Bump the all-dependencies group across 1 directory with 14 updates (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/416\"\u003e#416\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/ea4077df41e2e2451f7767ced4db0aaef1c2d5c2\"\u003e\u003ccode\u003eea4077d\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 10.21.2 to 10.21.3 (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/6d015281dee243fcbc9e359fdd204b0926704b02\"\u003e\u003ccode\u003e6d01528\u003c/code\u003e\u003c/a\u003e Bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.20.3...0.21.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-distro` from 0.62b1 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/CHANGELOG.md\"\u003eopentelemetry-distro's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-richconsole\u003c/code\u003e: Add support for suppressing resource\ninformation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3898\"\u003e#3898\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Add experimental metrics attributes Labeler\nutility\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4288\"\u003e#4288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Add \u003ccode\u003eOTEL_PYTHON_LOG_HANDLER_LEVEL\u003c/code\u003e\nand \u003ccode\u003eOTEL_PYTHON_LOG_FORMAT\u003c/code\u003e environment variables to configure the log level\nand formatter of the auto-instrumented \u003ccode\u003eLoggingHandler\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4298\"\u003e#4298\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-sqlite3\u003c/code\u003e: Add uninstrument, error status,\nsuppress, and no-op tests\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4335\"\u003e#4335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eBaggageLogProcessor\u003c/code\u003e to \u003ccode\u003eopentelemetry-processor-baggage\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4371\"\u003e#4371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-system-metrics\u003c/code\u003e: Add support for\n\u003ccode\u003eprocess.disk.io\u003c/code\u003e metric in system-metrics instrumentation\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4397\"\u003e#4397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: Register \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e in\n\u003ccode\u003eenvironment_variables.py\u003c/code\u003e so \u003ccode\u003eopentelemetry-instrument\u003c/code\u003e exposes a\n\u003ccode\u003e--semconv_stability_opt_in\u003c/code\u003e CLI argument\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4438\"\u003e#4438\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpand \u003ccode\u003eAGENTS.md\u003c/code\u003e with instrumentation/GenAI guidance and add PR review\ninstructions.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4457\"\u003e#4457\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation\u003c/code\u003e: update auto-instrumentation to re-inject\ninstrumentation path after init\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4469\"\u003e#4469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-dbapi\u003c/code\u003e: Add Database client operation duration\nand returned rows metrics\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4481\"\u003e#4481\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRemove redundant \u003ccode\u003epylint: disable=attribute-defined-outside-init\u003c/code\u003e comments\nand add rule to global \u003ccode\u003e.pylintrc\u003c/code\u003e disable list\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3839\"\u003e#3839\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003epylint\u003c/code\u003e to \u003ccode\u003e4.0.5\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4244\"\u003e#4244\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-instrumentation-logging\u003c/code\u003e: Use \u003ccode\u003eLogRecord.getMessage()\u003c/code\u003e to\nformat and extract each log record's body text to more closely match the\nexpected usage of the logging system. As a result, all OTel log record bodies\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\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/open-telemetry/opentelemetry-python-contrib/commits\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-exporter-otlp` from 1.41.1 to 1.42.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/blob/main/CHANGELOG.md\"\u003eopentelemetry-exporter-otlp's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.42.1/0.63b1 (2026-05-21)\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ePreserve the random trace ID flag when creating child spans instead of always\nsetting the random trace id bit depending on the available trace id\ngenerator.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5241\"\u003e#5241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 1.42.0/0.63b0 (2026-05-19)\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-api\u003c/code\u003e, \u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add support for 'random-trace-id'\nflags in W3C traceparent header trace flags. Implementations of \u003ccode\u003eIdGenerator\u003c/code\u003e\nthat do randomly generate the 56 least significant bits, should also\nimplement a \u003ccode\u003eis_trace_id_random\u003c/code\u003e methods that returns \u003ccode\u003eTrue\u003c/code\u003e.\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4854\"\u003e#4854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003elogs: add exception support to Logger emit and LogRecord attributes\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4908\"\u003e#4908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e: make retryable gRPC error codes\nconfigurable for gRPC exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4917\"\u003e#4917\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003ecreate_logger_provider\u003c/code\u003e/\u003ccode\u003econfigure_logger_provider\u003c/code\u003e\nto declarative file configuration, enabling LoggerProvider instantiation from\nconfig files without reading env vars\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4990\"\u003e#4990\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-exporter-otlp-json-common\u003c/code\u003e: add\n'opentelemetry-exporter-otlp-json-common' package for OTLP JSON exporters\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4996\"\u003e#4996\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: Add \u003ccode\u003eservice\u003c/code\u003e resource detector support to declarative\nfile configuration via \u003ccode\u003edetection_development.detectors[].service\u003c/code\u003e\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5003\"\u003e#5003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-docker-tests\u003c/code\u003e: add docker-tests coverage of\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-grpc\u003c/code\u003e and\n\u003ccode\u003eopentelemetry-exporter-otlp-proto-http\u003c/code\u003e metrics export\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5030\"\u003e#5030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eregistry\u003c/code\u003e keyword argument to \u003ccode\u003ePrometheusMetricReader\u003c/code\u003e to allow passing\na custom Prometheus registry\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5055\"\u003e#5055\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd WeaverLiveCheck test util\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5088\"\u003e#5088\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add \u003ccode\u003eload_entry_point\u003c/code\u003e shared utility to declarative\nfile configuration for loading plugins via entry points; refactor propagator\nloading to use it\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5093\"\u003e#5093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopentelemetry-sdk\u003c/code\u003e: add sampler plugin loading to declarative file\nconfiguration via the \u003ccode\u003eopentelemetry_sampler\u003c/code\u003e entry point group, matching the\nspec's PluginComponentProvider mechanism\n(\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/pull/5095\"\u003e#5095\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/open-telemetry/opentelemetry-python/commit/367e14d01104785ac28b1c66ac32b2082f864a12\"\u003e\u003ccode\u003e367e14d\u003c/code\u003e\u003c/a\u003e Prepare release 1.42.1/0.63b1 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5243\"\u003e#5243\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/fd8e50410b1788d34b36173dea58d8e38dcc80bc\"\u003e\u003ccode\u003efd8e504\u003c/code\u003e\u003c/a\u003e Preserve random trace ID flag for child spans (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5241\"\u003e#5241\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5242\"\u003e#5242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/013045e3787654123b08530059759842312325ab\"\u003e\u003ccode\u003e013045e\u003c/code\u003e\u003c/a\u003e [release/v1.42.x-0.63bx] Prepare release 1.42.0/0.63b0 (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5225\"\u003e#5225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1731583b4e7bc6ec6a33345aa19706fc83acc8d5\"\u003e\u003ccode\u003e1731583\u003c/code\u003e\u003c/a\u003e ci: Enable GitHub Merge Queue support (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5209\"\u003e#5209\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/7fab34d4f49c1cd67df07fa53471c0ae6c269008\"\u003e\u003ccode\u003e7fab34d\u003c/code\u003e\u003c/a\u003e fix(config): allow deflate for OTLP HTTP exporters (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5075\"\u003e#5075\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/0b690d2139f68dd42d2425c920aec882698443fa\"\u003e\u003ccode\u003e0b690d2\u003c/code\u003e\u003c/a\u003e ci: validate changelog fragment filenames (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/d4fabb4d6d79812a6d38dd900212f6a0fdb1866b\"\u003e\u003ccode\u003ed4fabb4\u003c/code\u003e\u003c/a\u003e feat(config): exporter plugin loading via entry points for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/e19d34600b177b97cf1d8320a77ff75133515012\"\u003e\u003ccode\u003ee19d346\u003c/code\u003e\u003c/a\u003e feat(config): generic resource detector plugin loading for declarative config...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/1d69bd2eaa02715ecf3877a8f391678be58f2f57\"\u003e\u003ccode\u003e1d69bd2\u003c/code\u003e\u003c/a\u003e sdk/metrics: copy attributes dict to prevent post-recording mutation (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python/issues/5106\"\u003e#5106\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/commit/990a6112a124e53cc0e3f66871ce8f8d00955d15\"\u003e\u003ccode\u003e990a611\u003c/code\u003e\u003c/a\u003e feat(config): propagator plugin loading via entry points for declarative conf...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python/compare/v1.41.1...v1.42.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `opentelemetry-instrumentation` from 0.62b1 to 0.63b1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/open-telemetry/opentelemetry-python-contrib/releases\"\u003eopentelemetry-instrumentation's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eopentelemetry-instrumentation-openai-v2 2.4b0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate experimental path from deprecated \u003ccode\u003eLLMInvocation\u003c/code\u003e to \u003ccode\u003eInferenceInvocation\u003c/code\u003e, using \u003ccode\u003ehandler.start_inference()\u003c/code\u003e and \u003ccode\u003einvocation.stop()\u003c/code\u003e/\u003ccode\u003einvocation.fail()\u003c/code\u003e directly (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4502\"\u003e#4502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003ecreate_duration_histogram\u003c/code\u003e and \u003ccode\u003ecreate_token_histogram\u003c/code\u003e from \u003ccode\u003eopentelemetry-util-genai\u003c/code\u003e instead of defining bucket boundaries locally (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4501\"\u003e#4501\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImport \u003ccode\u003eOTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT\u003c/code\u003e from \u003ccode\u003eopentelemetry.util.genai.environment_variables\u003c/code\u003e instead of re-defining it locally, making \u003ccode\u003eopentelemetry-util-genai\u003c/code\u003e the single source of truth for this constant. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4455\"\u003e#4455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix compatibility with wrapt 2.x by using positional arguments in \u003ccode\u003ewrap_function_wrapper()\u003c/code\u003e calls (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4445\"\u003e#4445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eChoiceBuffer\u003c/code\u003e crash on streaming tool-call deltas with \u003ccode\u003earguments=None\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4350\"\u003e#4350\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eStreamWrapper\u003c/code\u003e missing \u003ccode\u003e.headers\u003c/code\u003e and other attributes when using \u003ccode\u003ewith_raw_response\u003c/code\u003e streaming (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/4113\"\u003e#4113\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd opt-in support for latest experimental semantic conventions (v1.37.0). Set \u003ccode\u003eOTEL_SEMCONV_STABILITY_OPT_IN\u003c/code\u003e to \u003ccode\u003egen_ai_latest_experimental\u003c/code\u003e to enable. Add dependency on \u003ccode\u003eopentelemetry-util-genai\u003c/code\u003e pypi package. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/3715\"\u003e#3715\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd wrappers for OpenAI Responses API streams and response stream managers (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4280\"\u003e#4280\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd async wrappers for OpenAI Responses API streams and response stream managers (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4325\"\u003e#4325\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd strongly typed Responses API extractors with validation and content extraction improvements (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4337\"\u003e#4337\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd completion hook support. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4315\"\u003e#4315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eresponse_format\u003c/code\u003e handling: map \u003ccode\u003ejson_object\u003c/code\u003e/\u003ccode\u003ejson_schema\u003c/code\u003e to \u003ccode\u003ejson\u003c/code\u003e output type. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4315\"\u003e#4315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip attribute values with \u003ccode\u003eopenai.Omit\u003c/code\u003e value. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4315\"\u003e#4315\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDefault empty string for \u003ccode\u003egen_ai.request.model\u003c/code\u003e attribute on missing model. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4494\"\u003e#4494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopentelemetry-instrumentation-openai-v2 2.3b0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eAttributeError\u003c/code\u003e when handling \u003ccode\u003eLegacyAPIResponse\u003c/code\u003e (from \u003ccode\u003ewith_raw_response\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4017\"\u003e#4017\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for chat completions choice count and stop sequences span attributes (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4028\"\u003e#4028\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash with streaming \u003ccode\u003ewith_raw_response\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4033\"\u003e#4033\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump to 1.30.0 semconv schema: \u003ccode\u003egen_ai.request.seed\u003c/code\u003e instead of \u003ccode\u003egen_ai.openai.request.seed\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/pull/4036\"\u003e#4036\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eopentelemetry-instrumentation-openai-v2 2.2b0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix service tier attribute names: use \u003ccode\u003eGEN_AI_OPENAI_REQUEST_SERVICE_TIER\u003c/code\u003e for request attributes and \u003ccode\u003eGEN_AI_OPENAI_RESPONSE_SERVICE_TIER\u003c/code\u003e for response attributes. (\u003ca href=\"https://redirect.github.com/open-telemetry/opentelemetry-python-contrib/issues/3920\"\u003e#3920\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded support for OpenAI embeddings instrumentation (\u003ca href=\"https://redirect.githu...\n\n_Description has been truncated_","html_url":"https://github.com/beaconchain-horizon/prefect/pull/17","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/beaconchain-horizon%2Fprefect/issues/17","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/17/packages"}},{"old_version":"6.2.6","new_version":"7.1.4","update_type":"major","path":null,"pr_created_at":"2026-06-01T22:19:59.000Z","version_change":"6.2.6 → 7.1.4","issue":{"uuid":"4566799598","node_id":"PR_kwDOCE-DHM7hjPsk","number":2899,"state":"closed","title":"Bump cachetools from 6.2.6 to 7.1.4","user":"dependabot[bot]","labels":["dependencies","python:uv"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-18T11:02:51.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-01T22:19:59.000Z","updated_at":"2026-06-18T11:02:53.000Z","time_to_close":1428172,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"cachetools","old_version":"6.2.6","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.6 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!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/v6.2.6...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=uv\u0026previous-version=6.2.6\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/safe-global/safe-transaction-service/pull/2899","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/safe-global%2Fsafe-transaction-service/issues/2899","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/2899/packages"}},{"old_version":"7.0.5","new_version":"7.1.4","update_type":"minor","path":null,"pr_created_at":"2026-06-01T18:28:07.000Z","version_change":"7.0.5 → 7.1.4","issue":{"uuid":"4565417266","node_id":"PR_kwDOSlL6KM7her48","number":12,"state":"closed","title":"deps(py): bump the python-minor group across 1 directory with 40 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-08T05:41:39.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-01T18:28:07.000Z","updated_at":"2026-06-08T05:41:41.000Z","time_to_close":558812,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(py): bump","group_name":"python-minor","update_count":40,"packages":[{"name":"cachetools","old_version":"7.0.5","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"choreographer","old_version":"1.2.1","new_version":"1.3.0","repository_url":"https://github.com/plotly/choreographer"},{"name":"click","old_version":"8.3.2","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"decorator","old_version":"5.2.1","new_version":"5.3.1","repository_url":"https://github.com/micheles/decorator"},{"name":"duckdb","old_version":"1.5.2","new_version":"1.5.3","repository_url":"https://github.com/duckdb/duckdb-python"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.1","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.11","new_version":"3.17","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.12.0","new_version":"9.14.0","repository_url":"https://github.com/ipython/ipython"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"kaleido","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/plotly/kaleido"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"matplotlib-inline","old_version":"0.2.1","new_version":"0.2.2","repository_url":"https://github.com/ipython/matplotlib-inline"},{"name":"mcp","old_version":"1.27.0","new_version":"1.27.2","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"py-lets-be-rational","old_version":"1.0.1","new_version":"1.1.2","repository_url":"https://github.com/vollib/py_lets_be_rational"},{"name":"py-vollib","old_version":"1.0.1","new_version":"1.0.12","repository_url":"https://github.com/vollib/py_vollib"},{"name":"narwhals","old_version":"2.19.0","new_version":"2.22.0","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"numpy","old_version":"2.4.4","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"orjson","old_version":"3.11.8","new_version":"3.11.9","repository_url":"https://github.com/ijl/orjson"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"platformdirs","old_version":"4.9.6","new_version":"4.10.0","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"plotly","old_version":"6.6.0","new_version":"6.7.0","repository_url":"https://github.com/plotly/plotly.py"},{"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":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-engineio","old_version":"4.13.1","new_version":"4.13.2","repository_url":"https://github.com/miguelgrinberg/python-engineio"},{"name":"python-multipart","old_version":"0.0.26","new_version":"0.0.30","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"python-socketio","old_version":"5.16.1","new_version":"5.16.2","repository_url":"https://github.com/miguelgrinberg/python-socketio"},{"name":"python-telegram-bot","old_version":"22.6","new_version":"22.7","repository_url":"https://github.com/python-telegram-bot/python-telegram-bot"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"sqlalchemy","old_version":"2.0.49","new_version":"2.0.50","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"tornado","old_version":"6.5.5","new_version":"6.5.6","repository_url":"https://github.com/tornadoweb/tornado"},{"name":"traitlets","old_version":"5.14.3","new_version":"5.15.0","repository_url":"https://github.com/ipython/traitlets"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.44.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.7.0","repository_url":"https://github.com/jquast/wcwidth"},{"name":"wheel","old_version":"0.46.3","new_version":"0.47.0","repository_url":"https://github.com/pypa/wheel"},{"name":"wtforms","old_version":"3.2.1","new_version":"3.2.2","repository_url":"https://github.com/pallets-eco/wtforms"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 40 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.5` | `7.1.4` |\n| [choreographer](https://github.com/plotly/choreographer) | `1.2.1` | `1.3.0` |\n| [click](https://github.com/pallets/click) | `8.3.2` | `8.4.1` |\n| [decorator](https://github.com/micheles/decorator) | `5.2.1` | `5.3.1` |\n| [duckdb](https://github.com/duckdb/duckdb-python) | `1.5.2` | `1.5.3` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.1` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.17` |\n| [ipython](https://github.com/ipython/ipython) | `9.12.0` | `9.14.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [kaleido](https://github.com/plotly/kaleido) | `1.2.0` | `1.3.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [matplotlib-inline](https://github.com/ipython/matplotlib-inline) | `0.2.1` | `0.2.2` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.27.0` | `1.27.2` |\n| [py-lets-be-rational](https://github.com/vollib/py_lets_be_rational) | `1.0.1` | `1.1.2` |\n| [py-vollib](https://github.com/vollib/py_vollib) | `1.0.1` | `1.0.12` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.19.0` | `2.22.0` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.4` | `2.4.6` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.8` | `3.11.9` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.6` | `4.10.0` |\n| [plotly](https://github.com/plotly/plotly.py) | `6.6.0` | `6.7.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| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.1` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [python-engineio](https://github.com/miguelgrinberg/python-engineio) | `4.13.1` | `4.13.2` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.26` | `0.0.30` |\n| [python-socketio](https://github.com/miguelgrinberg/python-socketio) | `5.16.1` | `5.16.2` |\n| [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) | `22.6` | `22.7` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.49` | `2.0.50` |\n| [tornado](https://github.com/tornadoweb/tornado) | `6.5.5` | `6.5.6` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14.3` | `5.15.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.44.0` | `0.48.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.7.0` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.47.0` |\n| [wtforms](https://github.com/pallets-eco/wtforms) | `3.2.1` | `3.2.2` |\n\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 `choreographer` from 1.2.1 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/choreographer/blob/main/CHANGELOG.txt\"\u003echoreographer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ev1.3.0\nv1.3.0rc2\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCheck path validity for browser with is_file()\u003c/li\u003e\n\u003cli\u003eAdd option --verify_local in choreo_diagnose and fix local reporting logic\nv1.3.0rc1\u003c/li\u003e\n\u003cli\u003eWe now look for old download path as well as new download path\nv1.3.0rc0\u003c/li\u003e\n\u003cli\u003eChange to process group for better killing of multi-process chrome\u003c/li\u003e\n\u003cli\u003eAdd argument to Session/Target \u003ccode\u003esend_command(..., *, with_perf: bool)\u003c/code\u003e to\nreturn timing information about browser write/read.\u003c/li\u003e\n\u003cli\u003eUpdate default chrome from 135.0.7011.0/1418433 to 144.0.7527.0/1544685\u003c/li\u003e\n\u003cli\u003eFix: New chrome takes longer/doesn't populate targets right away, so add a\nretry loop to populate targets\u003c/li\u003e\n\u003cli\u003eAlter \u003ccode\u003eget_chrome\u003c/code\u003e verbose to print whole JSON\u003c/li\u003e\n\u003cli\u003eChange chrome download path to use XDG cache dir\u003c/li\u003e\n\u003cli\u003eDon't download chrome if we already have that version: add force argument\u003c/li\u003e\n\u003cli\u003eRemove unused system inspection code\u003c/li\u003e\n\u003cli\u003eAdd a set of helper functions to await for tab loading and send javascript\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/choreographer/commit/92147b1ccf024ae647f29ebf43057564011e06c9\"\u003e\u003ccode\u003e92147b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/296\"\u003e#296\u003c/a\u003e from plotly/cam/update-changelog-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/8851fc919bc7dfb27a48541543f1ff195c48eda3\"\u003e\u003ccode\u003e8851fc9\u003c/code\u003e\u003c/a\u003e Updates to release version v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/3128bddf909381a2b4205f0e28c0c3cb8b13498c\"\u003e\u003ccode\u003e3128bdd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/288\"\u003e#288\u003c/a\u003e from plotly/andrew/more_local_logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/a6f478e00fb81ad22db7c7c1d31028fb4ab20311\"\u003e\u003ccode\u003ea6f478e\u003c/code\u003e\u003c/a\u003e Add to changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/953e19ad5dc395a3554cfbaf25599a8a3db6d933\"\u003e\u003ccode\u003e953e19a\u003c/code\u003e\u003c/a\u003e Check browser is file whwen checking path validity\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/d062e355b819b84e57060d4e48fbe2aa6f063259\"\u003e\u003ccode\u003ed062e35\u003c/code\u003e\u003c/a\u003e Change default setting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c0c97fc64a55c773dd7484674996cf55d74249a1\"\u003e\u003ccode\u003ec0c97fc\u003c/code\u003e\u003c/a\u003e Add option to verify local with choreo_diagnose\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/7ade1922269a6999c06f2ff92b34a1770bba6d3e\"\u003e\u003ccode\u003e7ade192\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/286\"\u003e#286\u003c/a\u003e from plotly/andrew/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/edf284c8973dd9dc7f7b2f77a53481fe6f0d2671\"\u003e\u003ccode\u003eedf284c\u003c/code\u003e\u003c/a\u003e Update Roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c1b7abce535feb79748c888ba1130b985c13eb3f\"\u003e\u003ccode\u003ec1b7abc\u003c/code\u003e\u003c/a\u003e Changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/choreographer/compare/v1.2.1...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.2 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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\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\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.3.2...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `decorator` from 5.2.1 to 5.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/micheles/decorator/blob/master/CHANGES.md\"\u003edecorator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.3.1 (2026-05-18)\u003c/h2\u003e\n\u003cp\u003eAdded license SPDX identifier to pyproject.toml (reported by\nChristian Lackas).\u003c/p\u003e\n\u003ch2\u003e5.3.0 (2026-05-17)\u003c/h2\u003e\n\u003cp\u003eAdded official support for Python 3.14 (thanks to Hugo van Kemenade,\nDavid Cain and the GitHub user bersbersbers).\nFixed a bug with \u0026quot;return await\u0026quot; contributed by Kadir Can Ozden.\nMoved decorator.py to a package structure (\u003ccode\u003edecorator/__init__.py\u003c/code\u003e) and\nadded a stub file (\u003ccode\u003edecorator/__init__.pyi\u003c/code\u003e) contributed by Marco Gorelli.\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/micheles/decorator/commit/426e9e35d563ffe356e54bd0f970d153b8f25370\"\u003e\u003ccode\u003e426e9e3\u003c/code\u003e\u003c/a\u003e Bumped the version to 5.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/062ff0e0c33733f2148a5590d118a8570df846d5\"\u003e\u003ccode\u003e062ff0e\u003c/code\u003e\u003c/a\u003e Fixed the dependency on setuptools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/086ff5d95d4dc550117c12647a4427d70bf8833d\"\u003e\u003ccode\u003e086ff5d\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/5807a83ead31f0de5303fa950ddea49d850d7355\"\u003e\u003ccode\u003e5807a83\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/093aced11439251e496b47a9a9369501075e8d1a\"\u003e\u003ccode\u003e093aced\u003c/code\u003e\u003c/a\u003e Updated changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/e9ced7e63ad9502b3e2a3e3db5f5f1ccc16c5fd6\"\u003e\u003ccode\u003ee9ced7e\u003c/code\u003e\u003c/a\u003e Added license SPDX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/b3e82ddc04e8d0c18c51eecb30b4a59aee5aac1d\"\u003e\u003ccode\u003eb3e82dd\u003c/code\u003e\u003c/a\u003e Fixed CHANGES.md [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/f1ce8da8522193421436c368849afe886666b4e5\"\u003e\u003ccode\u003ef1ce8da\u003c/code\u003e\u003c/a\u003e Doc fix [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/c924d7c6aa2e47a0627706c385101ff8d558d091\"\u003e\u003ccode\u003ec924d7c\u003c/code\u003e\u003c/a\u003e Updated supported versions [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/8b83e8cca35f5c773654ce4ae89b4e3f84f430d3\"\u003e\u003ccode\u003e8b83e8c\u003c/code\u003e\u003c/a\u003e Fixed CHANGES [ci skip]\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/micheles/decorator/compare/5.2.1...5.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `duckdb` 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/duckdb/duckdb-python/releases\"\u003educkdb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.3 Bugfix Release\u003c/h2\u003e\n\u003cp\u003eSee the DuckDB core release notes here: \u003ca href=\"https://github.com/duckdb/duckdb/releases/tag/v1.5.3\"\u003ehttps://github.com/duckdb/duckdb/releases/tag/v1.5.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed in DuckDB Python\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eExport all symbols by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/445\"\u003educkdb/duckdb-python#445\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix concjunction OR by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/465\"\u003educkdb/duckdb-python#465\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse recursive mutex to deal with GIL \u0026lt;-\u0026gt; internal lock deadlocks by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/462\"\u003educkdb/duckdb-python#462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow self-joining of Polars lazyframes by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/466\"\u003educkdb/duckdb-python#466\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.5.2...v1.5.3\"\u003ehttps://github.com/duckdb/duckdb-python/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/duckdb/duckdb-python/commit/811b135ee5a0449378ab9635e0284b96485d58d6\"\u003e\u003ccode\u003e811b135\u003c/code\u003e\u003c/a\u003e DuckDB submodule pinned at v1.5.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/289bfbdc2914894ccbb41028a84abef34448126e\"\u003e\u003ccode\u003e289bfbd\u003c/code\u003e\u003c/a\u003e Bump submodule\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/f87d6d938fca2d7b1ae713396e77c86622d17e79\"\u003e\u003ccode\u003ef87d6d9\u003c/code\u003e\u003c/a\u003e Allow self-joining of Polars lazyframes (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/466\"\u003e#466\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/c88229d86bf8e5ff266abc06cc620dc13d9d3529\"\u003e\u003ccode\u003ec88229d\u003c/code\u003e\u003c/a\u003e Allow self-joining of Polars lazyframes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/559f6af94b5c10e863b5e09b318c5c9f6d6c6dda\"\u003e\u003ccode\u003e559f6af\u003c/code\u003e\u003c/a\u003e Only disable unity builds for editable installs on OSX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/97df04987ffd69a0c5a94b4e8802b78c0302023e\"\u003e\u003ccode\u003e97df049\u003c/code\u003e\u003c/a\u003e fix .clangd\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/fd8889e3024da05d7afe90f4e20d6b9bd2b3e9c0\"\u003e\u003ccode\u003efd8889e\u003c/code\u003e\u003c/a\u003e Use recursive mutex to deal with GIL \u0026lt;-\u0026gt; internal lock deadlocks (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/462\"\u003e#462\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/7b77328d1bbcf1a95726c332a47eb8ca817222c4\"\u003e\u003ccode\u003e7b77328\u003c/code\u003e\u003c/a\u003e [duckdb-labs bot] Bump DuckDB submodule (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/9a866338302f8b7d31acde303cec9e3238cb2874\"\u003e\u003ccode\u003e9a86633\u003c/code\u003e\u003c/a\u003e Fix concjunction OR (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/465\"\u003e#465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/3d778deea42aab1eccce0693538805b9d6183b44\"\u003e\u003ccode\u003e3d778de\u003c/code\u003e\u003c/a\u003e Fix concjunction OR\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duckdb/duckdb-python/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 `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\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-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.5.1\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.1 (2026-05-20)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAdd preliminary support for Python 3.15b1. This has not been\nreviewed by CPython core developers, but all tests pass. Binary\nwheels of this version won't work on earlier Python 3.15 builds and\nmay not work on later 3.15 builds.\u003c/li\u003e\n\u003cli\u003eFix the discrepancy in the way the two \u003ccode\u003egetcurrent\u003c/code\u003e APIs behave\nduring greenlet teardown. One API (the C API used by, e.g.,  gevent) raised a\n\u003ccode\u003eRuntimeError\u003c/code\u003e; the other (the Python \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e API)\nreturned \u003ccode\u003eNone\u003c/code\u003e. This second way is incompatible with greenlet's type\nannotations, so \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e now raises a\n\u003ccode\u003eRuntimeError\u003c/code\u003e as well.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.5.0 (2026-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the \u003ccode\u003eatexit\u003c/code\u003e callback. This callback caused greenlet APIs\nto become unavailable far too soon during interpreter shutdown. Now\nthey remain available while all \u003ccode\u003eatexit\u003c/code\u003e callbacks run. Sometime\nafter \u003ccode\u003ePy_IsFinalizing\u003c/code\u003e becomes true, they may begin misbehaving.\nBecause the order in which C extensions are finalized is undefined,\nC extensions that are sensitive to this need to check the results of\nthat function before invoking greenlet APIs. As a convenience,\n\u003ccode\u003ePyGreenlet_GetCurrent\u003c/code\u003e sets an exception and returns \u003ccode\u003eNULL\u003c/code\u003e\nwhen this happens (and \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e begins returning\n\u003ccode\u003eNone\u003c/code\u003e); other greenlet C API functions have undefined behaviour.\nMethods invoked directly on pre-existing \u003ccode\u003egreenlet.greenlet\u003c/code\u003e\nobjects will continue to function at least until the greenlet C\nextension has been garbage collected and finalized.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 508 \u0026lt;https://github.com/python-greenlet/greenlet/pull/508\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\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/python-greenlet/greenlet/commit/b5e5fc43a51c27ecffa1b1c7107c91464a6b26e2\"\u003e\u003ccode\u003eb5e5fc4\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c8e177413d34bc36ed56d2c185c232ab0538be90\"\u003e\u003ccode\u003ec8e1774\u003c/code\u003e\u003c/a\u003e Tweak wording in CHANGES about greenlet.getcurrent.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/7fb10c570f37b3eb4c8909c6164fdfac3269ddb6\"\u003e\u003ccode\u003e7fb10c5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/510\"\u003e#510\u003c/a\u003e from python-greenlet/315\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/9718ce5a23ea3360232b78a806a837d6c3d6183d\"\u003e\u003ccode\u003e9718ce5\u003c/code\u003e\u003c/a\u003e Add Py 3.15; make both API versions of getcurrent() consistent in raising Run...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/276e08afc4ddba87e4366390e3eeaecd61ccb3b8\"\u003e\u003ccode\u003e276e08a\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/509\"\u003e#509\u003c/a\u003e from python-greenlet/dependabot/github_actions/github...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/32b0ad69828eb69d879c70dbee948e685268901b\"\u003e\u003ccode\u003e32b0ad6\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish in the github-actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/173b692dc84288ef41572612ac744754f98eaa90\"\u003e\u003ccode\u003e173b692\u003c/code\u003e\u003c/a\u003e Back to development: 3.5.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/c7acc72000572811d6462ebe01733a974f194990\"\u003e\u003ccode\u003ec7acc72\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/d08f99bf40801c5d57af6e13631c0ba68300ecf7\"\u003e\u003ccode\u003ed08f99b\u003c/code\u003e\u003c/a\u003e CHANGES: Update link from \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/507\"\u003e#507\u003c/a\u003e to more full description in \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/fd3391e33cedc7a17a86059f18dfbec2b3a320bd\"\u003e\u003ccode\u003efd3391e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e from python-greenlet/issue507-remove-atexit\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.5.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.11 to 3.17\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.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\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003ch2\u003e3.13 (2026-04-22)\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/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\u003e\u003ca href=\"https://github.com/kjd/idna/commit/354eee9850a7b2962b65ae02010f7ebd9c99b7ed\"\u003e\u003ccode\u003e354eee9\u003c/code\u003e\u003c/a\u003e Apply ruff format to uts46data.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/8c34ffcab603b4a7a727d4e286b1f3342813281d\"\u003e\u003ccode\u003e8c34ffc\u003c/code\u003e\u003c/a\u003e Refactor uts46data into parallel arrays\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1189629e8a319f7c2b4678b5716c180ebd97de03\"\u003e\u003ccode\u003e1189629\u003c/code\u003e\u003c/a\u003e Range-encode joining_types for compact representation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f90b87adc6b6b2a591dfc7fb3f8e47870dc81722\"\u003e\u003ccode\u003ef90b87a\u003c/code\u003e\u003c/a\u003e Generic length limit for functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d6ffd28be164dfbd3ebca8b3396e39d191f4909b\"\u003e\u003ccode\u003ed6ffd28\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/247\"\u003e#247\u003c/a\u003e from kjd/release-3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/6d1a0de52a8b4690f1b2a89829aa85ff1de3635a\"\u003e\u003ccode\u003e6d1a0de\u003c/code\u003e\u003c/a\u003e Release 3.16\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 9.12.0 to 9.14.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/9d1f24b9687279362b66f4e8c8a36ffde895a05d\"\u003e\u003ccode\u003e9d1f24b\u003c/code\u003e\u003c/a\u003e release 9.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d8b9d11f2796300d914a88dc08de35ce93bc5aa0\"\u003e\u003ccode\u003ed8b9d11\u003c/code\u003e\u003c/a\u003e Add IPython 9.14 release notes (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15228\"\u003e#15228\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/80cc1b963349ebc472b69f7da505cccebb2e6ad5\"\u003e\u003ccode\u003e80cc1b9\u003c/code\u003e\u003c/a\u003e Apply suggestions from code review\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/99feaadc543d43abc9287734651f4b618305a6bb\"\u003e\u003ccode\u003e99feaad\u003c/code\u003e\u003c/a\u003e Prepare release notes for 9.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d0f27b7c656568b30d26bfcbe4232a6254abd64c\"\u003e\u003ccode\u003ed0f27b7\u003c/code\u003e\u003c/a\u003e directive typo (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15225\"\u003e#15225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/85f520ed0bbfb7a17d91ce18fd9dfefb8c2acfdd\"\u003e\u003ccode\u003e85f520e\u003c/code\u003e\u003c/a\u003e directive typo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4c3e934d97015e18f90c1b91d0b1d7936ae81d77\"\u003e\u003ccode\u003e4c3e934\u003c/code\u003e\u003c/a\u003e Fix docstring formatting for prompt_line_number_format help text (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15224\"\u003e#15224\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/4f88be10853e080303b51a71ce13a550297368db\"\u003e\u003ccode\u003e4f88be1\u003c/code\u003e\u003c/a\u003e DOC: Fix RST inline literal warning in prompt_line_number_format docstring\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/37211dc6d4ab956a7b2ad851a0c10a359a8f87e1\"\u003e\u003ccode\u003e37211dc\u003c/code\u003e\u003c/a\u003e DOC: Add sphinx_toml to docs/requirements.txt\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/433aa8e69e71c6a2caa53621c0a670141c617c5d\"\u003e\u003ccode\u003e433aa8e\u003c/code\u003e\u003c/a\u003e Fix broken 'Edit on GitHub' link for auto-generated API docs (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15218\"\u003e#15218\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/9.12.0...9.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jedi` from 0.19.2 to 0.20.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.20.0 (2026-05-02)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.14 support\u003c/li\u003e\n\u003cli\u003eRemoved support for Python 3.8 and 3.9\u003c/li\u003e\n\u003cli\u003eUpgraded Typeshed\u003c/li\u003e\n\u003cli\u003eBetter support for Final/ClassVar\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__new__\u003c/code\u003e is now also recognized as a signature and TypeVar inference\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eSelf\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eTypeAlias\u003c/code\u003e, generics for \u003ccode\u003etype[...]\u003c/code\u003e and \u003ccode\u003etuple[...]\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/davidhalter/jedi/commit/3102215478fe07b965dcd8221c17436d1dd7e8ac\"\u003e\u003ccode\u003e3102215\u003c/code\u003e\u003c/a\u003e Move the type parameter syntax tests so that it works for all versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/1b37f2eb946e825cbc2887c6dd34ee046f0ae68c\"\u003e\u003ccode\u003e1b37f2e\u003c/code\u003e\u003c/a\u003e Prepare for the 0.20.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8e4df5cc0ec511db1af6d358182b1fb7c1e0cbff\"\u003e\u003ccode\u003e8e4df5c\u003c/code\u003e\u003c/a\u003e Make sure the new generic syntax does not fail with latest parso\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4c9dbcca0329454b638bfa32e2825bedcfdf0eac\"\u003e\u003ccode\u003e4c9dbcc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2098\"\u003e#2098\u003c/a\u003e from davidhalter/updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/fedb1a5eb0d74446f6d431db2920ab5f1e1d5b18\"\u003e\u003ccode\u003efedb1a5\u003c/code\u003e\u003c/a\u003e Fix 3.10 tests in one more case\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/87e782f9c82de7297e243a770ac8888570bffa8e\"\u003e\u003ccode\u003e87e782f\u003c/code\u003e\u003c/a\u003e Fix flake8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/cd52d982e10ac54f0ebef06e0bd414f79589998a\"\u003e\u003ccode\u003ecd52d98\u003c/code\u003e\u003c/a\u003e Fixes to get the tests passing for 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/d0b11806d4d1def377234bc2dc512992c997a977\"\u003e\u003ccode\u003ed0b1180\u003c/code\u003e\u003c/a\u003e Finally make tests work for 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8520a9958b489bd8d30cf20b4d2798f7289aab45\"\u003e\u003ccode\u003e8520a99\u003c/code\u003e\u003c/a\u003e Implement support for TypeVar inference for \u003cstrong\u003enew\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/55e5f0cb92dd92d5bdc80ecfc38664a1afd921d1\"\u003e\u003ccode\u003e55e5f0c\u003c/code\u003e\u003c/a\u003e Implement new-style unions with TypeVars\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.2...v0.20.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `kaleido` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/kaleido/releases\"\u003ekaleido's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow for request headers to be added to Choreographer calls [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/446\"\u003e#446\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUpdate Choreographer to v1.3.0 [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/449\"\u003e#449\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003cli\u003eFix issue where exporting large figures could cause hang [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/442\"\u003e#442\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/EliasTalcott\"\u003e\u003ccode\u003e@​EliasTalcott\u003c/code\u003e\u003c/a\u003e for the contribution!\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/Kaleido/blob/master/CHANGELOG.md\"\u003ekaleido's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow for request headers to be added to Choreographer calls [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/446\"\u003e#446\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUpdate Choreographer to v1.3.0 [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/449\"\u003e#449\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003cli\u003eFix issue where exporting large figures could cause hang [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/442\"\u003e#442\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/EliasTalcott\"\u003e\u003ccode\u003e@​EliasTalcott\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.3.0rc0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/Kaleido/commit/b7a00c41895ab71b67e5b89b40f186c3f1cecbed\"\u003e\u003ccode\u003eb7a00c4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/451\"\u003e#451\u003c/a\u003e from plotly/release-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/423a4f1cc6cbc701f9238281d63324508f12a272\"\u003e\u003ccode\u003e423a4f1\u003c/code\u003e\u003c/a\u003e Update setuptools config to find required subpackages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/28131a743143cc5d134c6e962b603ff3a5ed6253\"\u003e\u003ccode\u003e28131a7\u003c/code\u003e\u003c/a\u003e Updates for release v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/f72dc86fa75afbca8756fcd9c9b5af550f038d75\"\u003e\u003ccode\u003ef72dc86\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/366\"\u003e#366\u003c/a\u003e from tschm/patch-3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/0c5e89030709bc873806c08542ae66afea304f71\"\u003e\u003ccode\u003e0c5e890\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/450\"\u003e#450\u003c/a\u003e from plotly/cam/js-dependency-updates-may-2026\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/4e95de54ad7874e254665444070cf613104749f5\"\u003e\u003ccode\u003e4e95de5\u003c/code\u003e\u003c/a\u003e Bump pygments from 2.19.2 to 2.20.0 in /src/py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/90ddc9d7e83d4b27cc11a44a9ca15c5d2c6c5688\"\u003e\u003ccode\u003e90ddc9d\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.2.3 to 2.6.3 in /src/py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/f9b850eb38d7d9bb3f24258012d776f03ad355a0\"\u003e\u003ccode\u003ef9b850e\u003c/code\u003e\u003c/a\u003e chore: Update JS dependencies for security fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/0978e65f23fbba486d005df1508e008a080d20e4\"\u003e\u003ccode\u003e0978e65\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/432\"\u003e#432\u003c/a\u003e from plotly/dependabot/npm_and_yarn/src/js/minimatch-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/b639582c0416f48a682ad01d157af22881d94f75\"\u003e\u003ccode\u003eb639582\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/429\"\u003e#429\u003c/a\u003e from plotly/dependabot/npm_and_yarn/src/js/qs-6.14.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/kaleido/compare/v1.2.0...v1.3.0\"\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 `matplotlib-inline` from 0.2.1 to 0.2.2\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/e6e197523ecfabfff1d976e5b6958c3ede948ccb\"\u003e\u003ccode\u003ee6e1975\u003c/code\u003e\u003c/a\u003e release 0.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/0aac2e223483ffbfb5a6076d8c2ca83545cca440\"\u003e\u003ccode\u003e0aac2e2\u003c/code\u003e\u003c/a\u003e Bump the actions group across 1 directory with 2 updates (\u003ca href=\"https://redirect.github.com/ipython/matplotlib-inline/issues/65\"\u003e#65\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/6eb2bd89dc8d4d6678478c6b2ec15be7b20d3374\"\u003e\u003ccode\u003e6eb2bd8\u003c/code\u003e\u003c/a\u003e Bump the actions group across 1 directory with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/631d7dd26be1287f64c5bd4bbb84888903e419b0\"\u003e\u003ccode\u003e631d7dd\u003c/code\u003e\u003c/a\u003e Zizmor hardening (\u003ca href=\"https://redirect.github.com/ipython/matplotlib-inline/issues/66\"\u003e#66\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/8d45c8fc427d39750751bdaa0ffe5abc8e30cd50\"\u003e\u003ccode\u003e8d45c8f\u003c/code\u003e\u003c/a\u003e Zizmor hardening\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/f830b37c728146dca4f947de6cbdb420ee9c69fb\"\u003e\u003ccode\u003ef830b37\u003c/code\u003e\u003c/a\u003e Specify BSD license and add license files (\u003ca href=\"https://redirect.github.com/ipython/matplotlib-inline/issues/62\"\u003e#62\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/e3b8bb10d275d5caa97d8d1b584d48797e494de4\"\u003e\u003ccode\u003ee3b8bb1\u003c/code\u003e\u003c/a\u003e Deprecate Python 3.9 in CI pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/c783ae72ed581f24fa136f34e6df4f6e99c3f785\"\u003e\u003ccode\u003ec783ae7\u003c/code\u003e\u003c/a\u003e Deprecate Python 3.9 in CI pipeline\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/8ac056c5730a6adbc9dd5e049b85163ba6a09a28\"\u003e\u003ccode\u003e8ac056c\u003c/code\u003e\u003c/a\u003e Update workflow to include matplotlib for tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/matplotlib-inline/commit/0cc8a2e91306c94e36f0a9cd8e31a38299b1c126\"\u003e\u003ccode\u003e0cc8a2e\u003c/code\u003e\u003c/a\u003e Use valid SPDX ID\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/matplotlib-inline/compare/0.2.1...0.2.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mcp` from 1.27.0 to 1.27.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/modelcontextprotocol/python-sdk/releases\"\u003emcp's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.27.2\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[v1.x] ci: deploy docs to py.sdk.modelcontextprotocol.io via Pages artifact by \u003ca href=\"https://github.com/maxisbey\"\u003e\u003ccode\u003e@​maxisbey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/modelcontextprotocol/python-sdk/pull/2635\"\u003emodelcontextprotocol/python-sdk#2635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[v1.x] Add subject and claims to AccessToken by \u003ca href=\"https://github.com/maxisbey\"\u003e\u003ccode\u003e@​maxisbey\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/modelcontextprotocol/python-sdk/pull/2690\"\u003emodelcontextprotocol/python-sdk#2690\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[v1.x] Bind transport sessions to the authenticated principal by \u003ca href=\"https://github.com/maxisbey\"\u003e\u003ccode\u003e@​maxisbey\u003c/code\u003e\u003c/a\u003e in \u003ca h...\n\n_Description has been truncated_","html_url":"https://github.com/joshuwajosh/ForexMindfortemprory/pull/12","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshuwajosh%2FForexMindfortemprory/issues/12","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/12/packages"}},{"old_version":"7.1.1","new_version":"7.1.4","update_type":"patch","path":null,"pr_created_at":"2026-06-01T01:15:42.000Z","version_change":"7.1.1 → 7.1.4","issue":{"uuid":"4559655873","node_id":"PR_kwDOK7Bgbc7hL-cF","number":374,"state":"closed","title":"Bump the pip group across 1 directory with 20 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-06-15T00:34:45.000Z","author_association":null,"state_reason":null,"created_at":"2026-06-01T01:15:42.000Z","updated_at":"2026-06-15T00:34:46.000Z","time_to_close":1207143,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"pip","update_count":20,"packages":[{"name":"black","old_version":"26.3.1","new_version":"26.5.1","repository_url":"https://github.com/psf/black"},{"name":"cachetools","old_version":"7.1.1","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.5.20","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"fastapi-cloud-cli","old_version":"0.17.1","new_version":"0.18.0","repository_url":"https://github.com/fastapilabs/fastapi-cloud-cli"},{"name":"httptools","old_version":"0.7.1","new_version":"0.8.0","repository_url":"https://github.com/MagicStack/httptools"},{"name":"idna","old_version":"3.13","new_version":"3.17","repository_url":"https://github.com/kjd/idna"},{"name":"pydantic-settings","old_version":"2.14.0","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"},{"name":"python-ldap","old_version":"3.4.5","new_version":"3.4.7","repository_url":"https://github.com/python-ldap/python-ldap"},{"name":"python-multipart","old_version":"0.0.27","new_version":"0.0.30","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"requests","old_version":"2.33.1","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"rich-toolkit","old_version":"0.19.7","new_version":"0.19.10"},{"name":"sentry-sdk","old_version":"2.59.0","new_version":"2.61.0","repository_url":"https://github.com/getsentry/sentry-python"},{"name":"starlette","old_version":"1.0.0","new_version":"1.2.1","repository_url":"https://github.com/Kludex/starlette"},{"name":"typer","old_version":"0.25.1","new_version":"0.26.4","repository_url":"https://github.com/fastapi/typer"},{"name":"uvicorn","old_version":"0.46.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"watchfiles","old_version":"1.1.1","new_version":"1.2.0","repository_url":"https://github.com/samuelcolvin/watchfiles"}],"path":null,"ecosystem":"pip"},"body":"Bumps the pip group with 20 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [black](https://github.com/psf/black) | `26.3.1` | `26.5.1` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.1` | `7.1.4` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.5.20` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.1` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [fastapi-cloud-cli](https://github.com/fastapilabs/fastapi-cloud-cli) | `0.17.1` | `0.18.0` |\n| [httptools](https://github.com/MagicStack/httptools) | `0.7.1` | `0.8.0` |\n| [idna](https://github.com/kjd/idna) | `3.13` | `3.17` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.14.0` | `2.14.1` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [pyjwt](https://github.com/jpadilla/pyjwt) | `2.12.1` | `2.13.0` |\n| [python-ldap](https://github.com/python-ldap/python-ldap) | `3.4.5` | `3.4.7` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.27` | `0.0.30` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| rich-toolkit | `0.19.7` | `0.19.10` |\n| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.59.0` | `2.61.0` |\n| [starlette](https://github.com/Kludex/starlette) | `1.0.0` | `1.2.1` |\n| [typer](https://github.com/fastapi/typer) | `0.25.1` | `0.26.4` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.46.0` | `0.48.0` |\n| [watchfiles](https://github.com/samuelcolvin/watchfiles) | `1.1.1` | `1.2.0` |\n\n\nUpdates `black` from 26.3.1 to 26.5.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/black/releases\"\u003eblack's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.5.1\u003c/h2\u003e\n\u003ch3\u003eStable style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix unstable formatting of annotated assignments whose subscript annotation contains\nan inline comment (e.g. \u003ccode\u003ex: list[  # pyright: ignore[...]\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/psf/black/issues/5130\"\u003e#5130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve inline comments (including \u003ccode\u003e# type: ignore\u003c/code\u003e) immediately before a\n\u003ccode\u003e# fmt: skip\u003c/code\u003e line, avoiding AST equivalence failures (\u003ca href=\"https://redirect.github.com/psf/black/issues/5139\"\u003e#5139\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect the version in the published executables (\u003ca href=\"https://redirect.github.com/psf/black/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Neovim integration guide covering conform.nvim, ALE, and simple command approaches\n(\u003ca href=\"https://redirect.github.com/psf/black/issues/5124\"\u003e#5124\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e26.5.0\u003c/h2\u003e\n\u003ch3\u003eHighlights\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),\nboth new syntactic features in Python 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5048\"\u003e#5048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so\nperformance may be slower than on existing Python versions. Wheels will be provided\nonce Python 3.15 is later in its release cycle. (\u003ca href=\"https://redirect.github.com/psf/black/issues/5127\"\u003e#5127\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eStable style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e# fmt: skip\u003c/code\u003e being ignored in nested \u003ccode\u003eif\u003c/code\u003e expressions with parenthesized \u003ccode\u003ein\u003c/code\u003e\nclauses (\u003ca href=\"https://redirect.github.com/psf/black/issues/4903\"\u003e#4903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd syntactic support for Python 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5048\"\u003e#5048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash when an f-string follows a \u003ccode\u003e# fmt: off\u003c/code\u003e comment inside brackets (\u003ca href=\"https://redirect.github.com/psf/black/issues/5097\"\u003e#5097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve multiline compound statement headers when \u003ccode\u003e# fmt: skip\u003c/code\u003e is placed on the\ncolon line (\u003ca href=\"https://redirect.github.com/psf/black/issues/5117\"\u003e#5117\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove heuristics around whether blank lines should appear before, within and after\ngroups of same-name decorated functions (such as \u003ccode\u003e@overload\u003c/code\u003e groups) in \u003ccode\u003e.pyi\u003c/code\u003e stub\nfiles (\u003ca href=\"https://redirect.github.com/psf/black/issues/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix blank lines being removed between a function and a decorated class in \u003ccode\u003e.pyi\u003c/code\u003e stub\nfiles (\u003ca href=\"https://redirect.github.com/psf/black/issues/5092\"\u003e#5092\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent string merger from creating unsplittable long lines when a pragma comment\n(e.g. \u003ccode\u003e# type: ignore\u003c/code\u003e) follows the closing bracket (\u003ca href=\"https://redirect.github.com/psf/black/issues/5096\"\u003e#5096\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRun CI on 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5127\"\u003e#5127\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOutput\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/psf/black/blob/main/CHANGES.md\"\u003eblack's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 26.5.1\u003c/h2\u003e\n\u003ch3\u003eStable style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix unstable formatting of annotated assignments whose subscript annotation contains\nan inline comment (e.g. \u003ccode\u003ex: list[  # pyright: ignore[...]\u003c/code\u003e) (\u003ca href=\"https://redirect.github.com/psf/black/issues/5130\"\u003e#5130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve inline comments (including \u003ccode\u003e# type: ignore\u003c/code\u003e) immediately before a\n\u003ccode\u003e# fmt: skip\u003c/code\u003e line, avoiding AST equivalence failures (\u003ca href=\"https://redirect.github.com/psf/black/issues/5139\"\u003e#5139\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect the version in the published executables (\u003ca href=\"https://redirect.github.com/psf/black/issues/5137\"\u003e#5137\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Neovim integration guide covering conform.nvim, ALE, and simple command approaches\n(\u003ca href=\"https://redirect.github.com/psf/black/issues/5124\"\u003e#5124\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 26.5.0\u003c/h2\u003e\n\u003ch3\u003eHighlights\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for unpacking in comprehensions (PEP 798) and for lazy imports (PEP 810),\nboth new syntactic features in Python 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5048\"\u003e#5048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePython 3.15 is now supported. Compiled wheels are not yet provided for Python 3.15, so\nperformance may be slower than on existing Python versions. Wheels will be provided\nonce Python 3.15 is later in its release cycle. (\u003ca href=\"https://redirect.github.com/psf/black/issues/5127\"\u003e#5127\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eStable style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e# fmt: skip\u003c/code\u003e being ignored in nested \u003ccode\u003eif\u003c/code\u003e expressions with parenthesized \u003ccode\u003ein\u003c/code\u003e\nclauses (\u003ca href=\"https://redirect.github.com/psf/black/issues/4903\"\u003e#4903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd syntactic support for Python 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5048\"\u003e#5048\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash when an f-string follows a \u003ccode\u003e# fmt: off\u003c/code\u003e comment inside brackets (\u003ca href=\"https://redirect.github.com/psf/black/issues/5097\"\u003e#5097\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve multiline compound statement headers when \u003ccode\u003e# fmt: skip\u003c/code\u003e is placed on the\ncolon line (\u003ca href=\"https://redirect.github.com/psf/black/issues/5117\"\u003e#5117\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview style\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove heuristics around whether blank lines should appear before, within and after\ngroups of same-name decorated functions (such as \u003ccode\u003e@overload\u003c/code\u003e groups) in \u003ccode\u003e.pyi\u003c/code\u003e stub\nfiles (\u003ca href=\"https://redirect.github.com/psf/black/issues/5021\"\u003e#5021\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix blank lines being removed between a function and a decorated class in \u003ccode\u003e.pyi\u003c/code\u003e stub\nfiles (\u003ca href=\"https://redirect.github.com/psf/black/issues/5092\"\u003e#5092\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePrevent string merger from creating unsplittable long lines when a pragma comment\n(e.g. \u003ccode\u003e# type: ignore\u003c/code\u003e) follows the closing bracket (\u003ca href=\"https://redirect.github.com/psf/black/issues/5096\"\u003e#5096\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePackaging\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRun CI on 3.15 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5127\"\u003e#5127\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/87928e6d6761a4a6d22250e1fee5601b3998086e\"\u003e\u003ccode\u003e87928e6\u003c/code\u003e\u003c/a\u003e Prepare release 26.5.1 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5140\"\u003e#5140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/c970a49702488739add6c728122deb3a99900803\"\u003e\u003ccode\u003ec970a49\u003c/code\u003e\u003c/a\u003e Preserve comments before fmt: skip lines (\u003ca href=\"https://redirect.github.com/psf/black/issues/5139\"\u003e#5139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/5809338fd5f92d50e80c2ad312292ae6d428a480\"\u003e\u003ccode\u003e5809338\u003c/code\u003e\u003c/a\u003e Preserve inline comments inside annotation subscripts (\u003ca href=\"https://redirect.github.com/psf/black/issues/5130\"\u003e#5130\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/61361b71995f6ea44ce01915bacd3ecc50642507\"\u003e\u003ccode\u003e61361b7\u003c/code\u003e\u003c/a\u003e docs: add Neovim integration guide and fix http link (\u003ca href=\"https://redirect.github.com/psf/black/issues/5124\"\u003e#5124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/ebe6018e3254629788376e619207719fbe34a849\"\u003e\u003ccode\u003eebe6018\u003c/code\u003e\u003c/a\u003e CI Hotfixes (\u003ca href=\"https://redirect.github.com/psf/black/issues/5136\"\u003e#5136\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/9cbd95f80e97c1ab4d690d1d41b81579a13bf75c\"\u003e\u003ccode\u003e9cbd95f\u003c/code\u003e\u003c/a\u003e Fix publish binaries again on Windows (\u003ca href=\"https://redirect.github.com/psf/black/issues/5134\"\u003e#5134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/3dc8e6c41911bdaedb4bac8d633979c34a112b78\"\u003e\u003ccode\u003e3dc8e6c\u003c/code\u003e\u003c/a\u003e Add new changelog (\u003ca href=\"https://redirect.github.com/psf/black/issues/5132\"\u003e#5132\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/6d0fff0d5a965b9d0d3dbd7c5738d835fd574130\"\u003e\u003ccode\u003e6d0fff0\u003c/code\u003e\u003c/a\u003e Fix publish binaries workflow (\u003ca href=\"https://redirect.github.com/psf/black/issues/5133\"\u003e#5133\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/d2490e24dad33b8f68c77602ee29160de0fea24b\"\u003e\u003ccode\u003ed2490e2\u003c/code\u003e\u003c/a\u003e Prepare release 26.5.0 (\u003ca href=\"https://redirect.github.com/psf/black/issues/5131\"\u003e#5131\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/black/commit/2b13ea76fa69d4923381df65deb1a5c896ca27ad\"\u003e\u003ccode\u003e2b13ea7\u003c/code\u003e\u003c/a\u003e Preserve multiline headers with fmt skip (\u003ca href=\"https://redirect.github.com/psf/black/issues/5117\"\u003e#5117\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/black/compare/26.3.1...26.5.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.1.1 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\u003c/blockquote\u003e\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.1.1...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.4.22 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\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.05.20\"\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.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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\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\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.3.3...8.4.1\"\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.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `fastapi-cloud-cli` from 0.17.1 to 0.18.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/releases\"\u003efastapi-cloud-cli's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.18.0\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show Top-3 files larger than threshold on \u003ccode\u003edeploy\u003c/code\u003e command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/190\"\u003e#190\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✨ Show if there's a new fastapi-cloud-cli version available. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/201\"\u003e#201\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Rename \u003ccode\u003eapp_slug\u003c/code\u003e parameter of \u003ccode\u003e_get_app\u003c/code\u003e to \u003ccode\u003eapp_id\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/192\"\u003e#192\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♻️ Improve message around application directory. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/191\"\u003e#191\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/197\"\u003e#197\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/194\"\u003e#194\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 fastar from 0.10.0 to 0.11.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/188\"\u003e#188\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/183\"\u003e#183\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 \u003ccode\u003ety\u003c/code\u003e from 0.0.21 to 0.0.35 and error on warnings. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/195\"\u003e#195\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/labeler from 6.0.1 to 6.1.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/193\"\u003e#193\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/blob/main/release-notes.md\"\u003efastapi-cloud-cli's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.18.0 (2026-05-22)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🚸 Show Top-3 files larger than threshold on \u003ccode\u003edeploy\u003c/code\u003e command. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/190\"\u003e#190\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✨ Show if there's a new fastapi-cloud-cli version available. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/201\"\u003e#201\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Rename \u003ccode\u003eapp_slug\u003c/code\u003e parameter of \u003ccode\u003e_get_app\u003c/code\u003e to \u003ccode\u003eapp_id\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/192\"\u003e#192\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♻️ Improve message around application directory. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/191\"\u003e#191\u003c/a\u003e by \u003ca href=\"https://github.com/patrick91\"\u003e\u003ccode\u003e@​patrick91\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/197\"\u003e#197\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/194\"\u003e#194\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 fastar from 0.10.0 to 0.11.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/188\"\u003e#188\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Add zizmor and fix audit findings. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/183\"\u003e#183\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 \u003ccode\u003ety\u003c/code\u003e from 0.0.21 to 0.0.35 and error on warnings. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/195\"\u003e#195\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump actions/labeler from 6.0.1 to 6.1.0. PR \u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/pull/193\"\u003e#193\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/26541b275a6aaeadad9a27c8177771f5939c2d3f\"\u003e\u003ccode\u003e26541b2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.18.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/d3423567b862e67df04144054b2e4b69cc497f17\"\u003e\u003ccode\u003ed342356\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/1ca104f73223a98e2764d99d8c3a1bead23dc22a\"\u003e\u003ccode\u003e1ca104f\u003c/code\u003e\u003c/a\u003e 🚸 Show Top-3 files larger than threshold on \u003ccode\u003edeploy\u003c/code\u003e command (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/190\"\u003e#190\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/32a17b8854d6a27464f30e43e83ba73d42b41fe0\"\u003e\u003ccode\u003e32a17b8\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/18b4a43c6e286277a6a9d510b0458d17afc899d0\"\u003e\u003ccode\u003e18b4a43\u003c/code\u003e\u003c/a\u003e ✨ Show if there's a new fastapi-cloud-cli version available (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/201\"\u003e#201\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/ce2110b7b97fb57bc6a547b7972fdce01679fe66\"\u003e\u003ccode\u003ece2110b\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/4916f02249b5d703ff7e78cf3c9921b66589b43e\"\u003e\u003ccode\u003e4916f02\u003c/code\u003e\u003c/a\u003e 🔒️ Only allow team members to modify dependencies (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/197\"\u003e#197\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/8dae1ac9758bab3d99d0a2b669e551a0ec8a9984\"\u003e\u003ccode\u003e8dae1ac\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/0780b8933ee29ad6cfd7fb7167eaa106cd2d8775\"\u003e\u003ccode\u003e0780b89\u003c/code\u003e\u003c/a\u003e ⬆ Bump urllib3 from 2.6.3 to 2.7.0 (\u003ca href=\"https://redirect.github.com/fastapilabs/fastapi-cloud-cli/issues/194\"\u003e#194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/commit/8790640da9e24e140d14b928016c6c85f7f62bb8\"\u003e\u003ccode\u003e8790640\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapilabs/fastapi-cloud-cli/compare/0.17.1...0.18.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `httptools` from 0.7.1 to 0.8.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/MagicStack/httptools/releases\"\u003ehttptools's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.8.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eAdd http-parser and llhttp licenses into the wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/135\"\u003e#135\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/justeph\"\u003e\u003ccode\u003e@​justeph\u003c/code\u003e\u003c/a\u003e in c398a157)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMark cython module as free-threading compatible (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/139\"\u003e#139\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/kumaraditya303\"\u003e\u003ccode\u003e@​kumaraditya303\u003c/code\u003e\u003c/a\u003e in 28d1db15)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix all typing issues (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/134\"\u003e#134\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in a9bda0ed)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBump llhttp to 9.4.1 (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/145\"\u003e#145\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/fantix\"\u003e\u003ccode\u003e@​fantix\u003c/code\u003e\u003c/a\u003e in e3e8d71e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSecurity: fix URL truncation issue (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/144\"\u003e#144\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/fantix\"\u003e\u003ccode\u003e@​fantix\u003c/code\u003e\u003c/a\u003e in a0283f07 for \u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/142\"\u003e#142\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAllow building with latest setuptools (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/138\"\u003e#138\u003c/a\u003e)\n(by \u003ca href=\"https://github.com/OldManYellsAtCloud\"\u003e\u003ccode\u003e@​OldManYellsAtCloud\u003c/code\u003e\u003c/a\u003e in c403ad1a)\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/MagicStack/httptools/commit/cf10ce6f0dae56e61817e67b9bb073dd39d0191a\"\u003e\u003ccode\u003ecf10ce6\u003c/code\u003e\u003c/a\u003e httptools 0.8.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/a0283f07c8a7a3f81e26135283daa25e4baba3af\"\u003e\u003ccode\u003ea0283f0\u003c/code\u003e\u003c/a\u003e security: fix URL truncation issue (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/144\"\u003e#144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/05e6b8e9cf71fed8fa0e4796a2c1a52351b2e182\"\u003e\u003ccode\u003e05e6b8e\u003c/code\u003e\u003c/a\u003e ci: add freethreading 3.14 to the CI matrix (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/146\"\u003e#146\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/e3e8d71ee946937209aa965400cc2a8710520215\"\u003e\u003ccode\u003ee3e8d71\u003c/code\u003e\u003c/a\u003e Bump llhttp to 9.4.1 (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/145\"\u003e#145\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/a9bda0edb93da51c68cbf6db791c958166b86249\"\u003e\u003ccode\u003ea9bda0e\u003c/code\u003e\u003c/a\u003e Fix all typing issues (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/134\"\u003e#134\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/28d1db15eaeaab5bc7d376d2c2035d966b6e1378\"\u003e\u003ccode\u003e28d1db1\u003c/code\u003e\u003c/a\u003e mark cython module as free-threading compatible (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/139\"\u003e#139\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/c403ad1ad6cc9345834269a0611b74c6ee4bdcfa\"\u003e\u003ccode\u003ec403ad1\u003c/code\u003e\u003c/a\u003e Allow building with latest setuptools (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/138\"\u003e#138\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/c398a1579a30ba12b5aeed2d7163644947514590\"\u003e\u003ccode\u003ec398a15\u003c/code\u003e\u003c/a\u003e Add http-parser and llhttp licenses into the wheels (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/135\"\u003e#135\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/4cfdabd31ccfd5ccf9ab8c60992b4348ebcf5a84\"\u003e\u003ccode\u003e4cfdabd\u003c/code\u003e\u003c/a\u003e ci: fix release workflow (\u003ca href=\"https://redirect.github.com/MagicStack/httptools/issues/132\"\u003e#132\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/MagicStack/httptools/commit/ef71da977cde416fcbd570393fe0c1e22d26b56f\"\u003e\u003ccode\u003eef71da9\u003c/code\u003e\u003c/a\u003e Post-release version bump\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/MagicStack/httptools/compare/v0.7.1...v0.8.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.13 to 3.17\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.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\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003c/blockquote\u003e\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/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\u003e\u003ca href=\"https://github.com/kjd/idna/commit/354eee9850a7b2962b65ae02010f7ebd9c99b7ed\"\u003e\u003ccode\u003e354eee9\u003c/code\u003e\u003c/a\u003e Apply ruff format to uts46data.py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/8c34ffcab603b4a7a727d4e286b1f3342813281d\"\u003e\u003ccode\u003e8c34ffc\u003c/code\u003e\u003c/a\u003e Refactor uts46data into parallel arrays\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/1189629e8a319f7c2b4678b5716c180ebd97de03\"\u003e\u003ccode\u003e1189629\u003c/code\u003e\u003c/a\u003e Range-encode joining_types for compact representation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f90b87adc6b6b2a591dfc7fb3f8e47870dc81722\"\u003e\u003ccode\u003ef90b87a\u003c/code\u003e\u003c/a\u003e Generic length limit for functions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d6ffd28be164dfbd3ebca8b3396e39d191f4909b\"\u003e\u003ccode\u003ed6ffd28\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/247\"\u003e#247\u003c/a\u003e from kjd/release-3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/6d1a0de52a8b4690f1b2a89829aa85ff1de3635a\"\u003e\u003ccode\u003e6d1a0de\u003c/code\u003e\u003c/a\u003e Release 3.16\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.13...v3.17\"\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.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pydantic/pydantic-settings/releases\"\u003epydantic-settings's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.14.1\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump the python-packages group with 4 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/850\"\u003epydantic/pydantic-settings#850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 5 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/854\"\u003epydantic/pydantic-settings#854\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 3 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/853\"\u003epydantic/pydantic-settings#853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the python-packages group with 2 updates by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/856\"\u003epydantic/pydantic-settings#856\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/858\"\u003epydantic/pydantic-settings#858\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePrepare release 2.14.1 by \u003ca href=\"https://github.com/hramezani\"\u003e\u003ccode\u003e@​hramezani\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/pull/859\"\u003epydantic/pydantic-settings#859\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\"\u003ehttps://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/e95c30bec8cfaee88ee275138c064aea97a25bdf\"\u003e\u003ccode\u003ee95c30b\u003c/code\u003e\u003c/a\u003e Prepare release 2.14.1 (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/859\"\u003e#859\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/0c8734581b6cf70a995afad603ac456631d00621\"\u003e\u003ccode\u003e0c87345\u003c/code\u003e\u003c/a\u003e Fix field named \u003ccode\u003ecls\u003c/code\u003e conflicting with classmethod parameter (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/858\"\u003e#858\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/7bd0072795a800065b42210b6dca90fc9b83daf7\"\u003e\u003ccode\u003e7bd0072\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 2 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/856\"\u003e#856\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/b03e573d017ed48e1c2774a5e0b715db9766c76b\"\u003e\u003ccode\u003eb03e573\u003c/code\u003e\u003c/a\u003e Bump the github-actions group with 3 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/853\"\u003e#853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/eaa3b434938411ec8a3717ea646614561e713f51\"\u003e\u003ccode\u003eeaa3b43\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 5 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/854\"\u003e#854\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pydantic/pydantic-settings/commit/9f95615c24c6813c1d7d203576581a79cb6d9e8e\"\u003e\u003ccode\u003e9f95615\u003c/code\u003e\u003c/a\u003e Bump the python-packages group with 4 updates (\u003ca href=\"https://redirect.github.com/pydantic/pydantic-settings/issues/850\"\u003e#850\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pydantic/pydantic-settings/compare/v2.14.0...v2.14.1\"\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\nUpdates `pyjwt` from 2.12.1 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\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__\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/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\u003eSee full diff in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nU...\n\n_Description has been truncated_","html_url":"https://github.com/ral-facilities/ldap-jwt-auth/pull/374","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ral-facilities%2Fldap-jwt-auth/issues/374","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/374/packages"}},{"old_version":"7.1.1","new_version":"7.1.4","update_type":"patch","path":"/python","pr_created_at":"2026-06-01T00:41:41.000Z","version_change":"7.1.1 → 7.1.4","issue":{"uuid":"4559549160","node_id":"PR_kwDOPi7ob87hLpJp","number":360,"state":"open","title":"fix(deps): Bump cachetools from 7.1.1 to 7.1.4 in /python","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-06-01T00:41:41.000Z","updated_at":"2026-06-01T00:41:58.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(deps): Bump","packages":[{"name":"cachetools","old_version":"7.1.1","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":"/python","ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 7.1.1 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\u003c/blockquote\u003e\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.1.1...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=pip\u0026previous-version=7.1.1\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\n🤖 **Auto-generated PR Summary**\n\n## 📝 Changes Summary\n\n### Recent Commits:\n- 669932f fix(deps): Bump cachetools from 7.1.1 to 7.1.4 in /python\n\n## 📁 Files Changed\n\n**Total files changed: 1**\n\n- 📄 **Other**: 1 files\n\n\u003cdetails\u003e\n\u003csummary\u003e📋 Detailed File List\u003c/summary\u003e\n\n#### 🧪 Tests\n\n\n#### 📚 Documentation\n\n\n#### 🔧 Source Code\n\n\n#### ⚙️ Configuration\n\n\n#### 📄 Other Files\n\n- `python/requirements.txt`\n\n\u003c/details\u003e\n\n## 🏷️ Change Type\n\n\n## ✅ Review Checklist\n\n- [ ] Code follows project conventions (Biome linting)\n- [ ] TypeScript types are properly defined\n- [ ] Tests are added/updated for new functionality\n- [ ] Documentation is updated if necessary\n- [ ] All CI checks pass\n- [ ] Breaking changes are documented\n\n---\n\n*🤖 This description was automatically generated from code changes*","html_url":"https://github.com/ksleep98/napoleon-game-4players/pull/360","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksleep98%2Fnapoleon-game-4players/issues/360","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/360/packages"}},{"old_version":"\u003e=5.3","new_version":"\u003e=7.1.4","update_type":null,"path":null,"pr_created_at":"2026-05-31T10:19:53.000Z","version_change":"\u003e=5.3 → \u003e=7.1.4","issue":{"uuid":"4557245100","node_id":"PR_kwDOSs5Jes7hEvQn","number":5,"state":"open","title":"Update cachetools requirement from \u003e=5.3 to \u003e=7.1.4","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-05-31T10:19:53.000Z","updated_at":"2026-05-31T10:19:54.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Update","packages":[{"name":"cachetools","old_version":"\u003e=5.3","new_version":"\u003e=7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Updates the requirements on [cachetools](https://github.com/tkem/cachetools) to permit the latest version.\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!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/v5.3.0...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/xiaoke949/guard-surface-cn/pull/5","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiaoke949%2Fguard-surface-cn/issues/5","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/5/packages"}},{"old_version":"7.1.3","new_version":"7.1.4","update_type":"patch","path":null,"pr_created_at":"2026-05-31T04:33:07.000Z","version_change":"7.1.3 → 7.1.4","issue":{"uuid":"4556571063","node_id":"PR_kwDOSXLGM87hCxDL","number":15,"state":"closed","title":"chore(deps): bump the uv-dependencies group across 1 directory with 12 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-06-07T04:29:37.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-31T04:33:07.000Z","updated_at":"2026-06-07T04:29:39.000Z","time_to_close":604590,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv-dependencies","update_count":12,"packages":[{"name":"apprise","old_version":"1.10.0","new_version":"1.11.0","repository_url":"https://github.com/caronc/apprise"},{"name":"click","old_version":"8.4.0","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"cyclopts","old_version":"4.15.0","new_version":"4.16.1","repository_url":"https://github.com/BrianPugh/cyclopts"},{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"pydocket","old_version":"0.20.3","new_version":"0.21.1","repository_url":"https://github.com/chrisguidry/docket"},{"name":"uv","old_version":"0.11.15","new_version":"0.11.17","repository_url":"https://github.com/astral-sh/uv"},{"name":"redis","old_version":"7.4.0","new_version":"8.0.0","repository_url":"https://github.com/redis/redis-py"},{"name":"virtualenv","old_version":"21.3.3","new_version":"21.4.1","repository_url":"https://github.com/pypa/virtualenv"},{"name":"ruff","old_version":"0.15.14","new_version":"0.15.15","repository_url":"https://github.com/astral-sh/ruff"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-dependencies group with 12 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [apprise](https://github.com/caronc/apprise) | `1.10.0` | `1.11.0` |\n| [click](https://github.com/pallets/click) | `8.4.0` | `8.4.1` |\n| [cyclopts](https://github.com/BrianPugh/cyclopts) | `4.15.0` | `4.16.1` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.3` | `7.1.4` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.48.0` |\n| [pydocket](https://github.com/chrisguidry/docket) | `0.20.3` | `0.21.1` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.15` | `0.11.17` |\n| [redis](https://github.com/redis/redis-py) | `7.4.0` | `8.0.0` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.3.3` | `21.4.1` |\n| [ruff](https://github.com/astral-sh/ruff) | `0.15.14` | `0.15.15` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n\n\nUpdates `apprise` from 1.10.0 to 1.11.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/caronc/apprise/releases\"\u003eapprise's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eRelease v1.11.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eA big win for this release is priortization of grouped/tagged content. Basically, this release allows you to tag multiple items and provide a weight to them.   Apprise will attempt to notify the highest priority/weighted services first (of same level), and only if this level fails will it try the next.  Tagging is no longer just a \u003ccode\u003etag\u003c/code\u003e.  It's now \u003ccode\u003eweight:tag\u003c/code\u003e too;  for example \u003ccode\u003e100:friends\u003c/code\u003e  associates the weight of \u003ccode\u003e100\u003c/code\u003e with the tag \u003ccode\u003efriends\u003c/code\u003e.  You can still continue to notify friends with your Apprise calls, but if there are weight categories, then these will be factored into the order.  Highest priority (weighted) tags have a lower integer value (zero being the  higest priority).  Only the next priority will be notified if the first fails.\u003c/p\u003e\n\u003cp\u003eThis releae also allows you to set up a notifiation service to gracefully fail and not have Apprise itself report a failure.  This is useful for situations where you notify several end points and you really don't care if they're unavailable or not.   Apprise wil do it's usual best effort to send the notification, but not treat it as a failure if it can't get through. Use \u003ccode\u003eoptional=yes\u003c/code\u003e on your Apprise URL.\u003c/p\u003e\n\u003cp\u003eThirdly, this release introduces retries! You can now have Apprise attempt to notify your endpoint a second, or a third, (up to 10x) tries before giving up and deeming it unable to send the notification.  Use \u003ccode\u003eretry=X\u003c/code\u003e on your Apprise URL\u003c/p\u003e\n\u003ch3\u003e:mega: New Notification Services:\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdded Zoom (Incoming Webhook) Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1596\"\u003ecaronc/apprise#1596\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded WeChat Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1598\"\u003ecaronc/apprise#1598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRingCentral Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/878\"\u003ecaronc/apprise#878\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSession Open Group Server Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1615\"\u003ecaronc/apprise#1615\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded HumHub Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1623\"\u003ecaronc/apprise#1623\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAmazon Chime Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1627\"\u003ecaronc/apprise#1627\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGroupMe Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1629\"\u003ecaronc/apprise#1629\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:lady_beetle:  Bugfixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eimproved robustness of windows test cases preventing others from passing in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1609\"\u003ecaronc/apprise#1609\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHandle XMPP SASL SCRAM-PLUS / Channel Binding in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1619\"\u003ecaronc/apprise#1619\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTRACE logging during apprise init cleaned up in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1622\"\u003ecaronc/apprise#1622\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efixed mastodon error: AttributeError -  'list' object has no attribute 'union' in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1631\"\u003ecaronc/apprise#1631\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:bulb: Features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eo365:// saveToSentItems configurable - ?savesent=no in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1599\"\u003ecaronc/apprise#1599\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdated WhatsApp Buisness Graph API to v21 in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1603\"\u003ecaronc/apprise#1603\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:fire: Built in retries, escalations, priorities, and optional service calls in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1601\"\u003ecaronc/apprise#1601\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSlack Template/Payload support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1604\"\u003ecaronc/apprise#1604\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded Slack workflows and trigger support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1605\"\u003ecaronc/apprise#1605\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:rocket: Pushover E2EE Support in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1612\"\u003ecaronc/apprise#1612\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWKD support added to email plugin in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1614\"\u003ecaronc/apprise#1614\u003c/a\u003e and \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1618\"\u003ecaronc/apprise#1618\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAmazon SNS/SES Improvements in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1620\"\u003ecaronc/apprise#1620\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eNotifico Standalone Support Added in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1275\"\u003ecaronc/apprise#1275\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e:heart: Life-Cycle Support\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate LoC badge by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1593\"\u003ecaronc/apprise#1593\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTwitter/X migration to API v2 in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1607\"\u003ecaronc/apprise#1607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eimprovements to workflow:// based on recent slack:// changes in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1608\"\u003ecaronc/apprise#1608\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:unlock: Added redirect= for allowing url redirection control in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1610\"\u003ecaronc/apprise#1610\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003emqtt:// now depends on paho-mqtt v2.1.0+ in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1613\"\u003ecaronc/apprise#1613\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:skull: Retire msteams:// as it is no longer in service upstream in \u003ca href=\"https://redirect.github.com/caronc/apprise/pull/1625\"\u003ecaronc/apprise#1625\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstallation\u003c/h2\u003e\n\u003cp\u003eApprise is available \u003ca href=\"https://pypi.org/project/apprise/\"\u003eon PyPI\u003c/a\u003e through \u003cem\u003epip\u003c/em\u003e:\u003c/p\u003e\n\u003cpre lang=\"bash\"\u003e\u003ccode\u003e# Install Apprise v1.11.0 from PyPI\r\npip install apprise==1.11.0\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/caronc/apprise/commit/158c4e1febc3e6093b0f357776b315a90c8a89b5\"\u003e\u003ccode\u003e158c4e1\u003c/code\u003e\u003c/a\u003e bumped version to v1.11.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/21db421ee89b24f1716a4fce74a4404a94bbabe7\"\u003e\u003ccode\u003e21db421\u003c/code\u003e\u003c/a\u003e GroupMe Support Added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1629\"\u003e#1629\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/f1e4ad2fd6659529597b1e07a1e44192faebff54\"\u003e\u003ccode\u003ef1e4ad2\u003c/code\u003e\u003c/a\u003e fixed mastodon error: AttributeError - 'list' object has no attribute 'union'...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/e17fe9dd64dd79e373877cf8ee07595cc50a01cc\"\u003e\u003ccode\u003ee17fe9d\u003c/code\u003e\u003c/a\u003e Amazon Chime Support (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1627\"\u003e#1627\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/dfdac59c9945385c4c75613e57d19558ec995d50\"\u003e\u003ccode\u003edfdac59\u003c/code\u003e\u003c/a\u003e HumHub Support added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1623\"\u003e#1623\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/9de0397c30a7a2e58eb57c8da995ec54eada80bc\"\u003e\u003ccode\u003e9de0397\u003c/code\u003e\u003c/a\u003e Notifico Standalone Support Added (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1275\"\u003e#1275\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/c3e67e61d35a1b0609d176786db1e0b2cc1287da\"\u003e\u003ccode\u003ec3e67e6\u003c/code\u003e\u003c/a\u003e Retired msteams:// - as it is no longer in service upstream (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1625\"\u003e#1625\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/b463f23979455b61c548a550e40a3c75f0191b30\"\u003e\u003ccode\u003eb463f23\u003c/code\u003e\u003c/a\u003e TRACE logging during apprise init cleaned up (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1622\"\u003e#1622\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/1e2fdeb72bd8165ad613b162794778ff1c684e67\"\u003e\u003ccode\u003e1e2fdeb\u003c/code\u003e\u003c/a\u003e Amazon SNS/SES Improvements (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1620\"\u003e#1620\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/caronc/apprise/commit/4706d0a4599a5072c8ae17375ee81862bcaac460\"\u003e\u003ccode\u003e4706d0a\u003c/code\u003e\u003c/a\u003e Handle XMPP SASL SCRAM-PLUS / Channel Binding (\u003ca href=\"https://redirect.github.com/caronc/apprise/issues/1619\"\u003e#1619\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/caronc/apprise/compare/v1.10.0...v1.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.4.0 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\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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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.4.0...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cyclopts` from 4.15.0 to 4.16.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/BrianPugh/cyclopts/releases\"\u003ecyclopts's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.16.1\u003c/h2\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix fish completion for positional args and run fish tests in ci by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/823\"\u003eBrianPugh/cyclopts#823\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix zsh completion recursion when \u003ccode\u003eprog_name\u003c/code\u003e matches a builtin helper by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/825\"\u003eBrianPugh/cyclopts#825\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eMisc\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd ubuntu-24.04-arm to the CI testing matrix by \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/822\"\u003eBrianPugh/cyclopts#822\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add missing typer Option imports in flag negation examples by \u003ca href=\"https://github.com/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/824\"\u003eBrianPugh/cyclopts#824\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/SAY-5\"\u003e\u003ccode\u003e@​SAY-5\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/824\"\u003eBrianPugh/cyclopts#824\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.16.0...v4.16.1\"\u003ehttps://github.com/BrianPugh/cyclopts/compare/v4.16.0...v4.16.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.16.0\u003c/h2\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReturn-value objects can now declare their own exit code by defining a \u003ccode\u003e__cyclopts_returncode__\u003c/code\u003e method, which is honored by all built-in \u003ccode\u003eresult_action\u003c/code\u003e handlers. Custom \u003ccode\u003eresult_action\u003c/code\u003e callables can opt in via the new \u003ccode\u003ecyclopts.resolve_returncode\u003c/code\u003e helper. By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/818\"\u003eBrianPugh/cyclopts#818\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://peps.python.org/pep-0692/\"\u003ePEP 692\u003c/a\u003e support: when \u003ccode\u003e**kwargs\u003c/code\u003e is annotated as \u003ccode\u003eUnpack[SomeTypedDict]\u003c/code\u003e, the TypedDict's fields are promoted to top-level CLI options instead of the generic \u003ccode\u003e--[KEYWORD]\u003c/code\u003e catch-all. Per-field \u003ccode\u003eRequired\u003c/code\u003e / \u003ccode\u003eNotRequired\u003c/code\u003e markers are respected independently of the parent kwargs argument. By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/819\"\u003eBrianPugh/cyclopts#819\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCycloptsError.msg\u003c/code\u003e now accepts a \u003ccode\u003erich.Text\u003c/code\u003e instance. Cyclopts' error-message style palette is exposed as \u003ccode\u003ecyclopts.exceptions.STYLE_OFFENDING_VALUE\u003c/code\u003e, \u003ccode\u003eSTYLE_NAME\u003c/code\u003e, \u003ccode\u003eSTYLE_VALID_CHOICE\u003c/code\u003e, \u003ccode\u003eSTYLE_SUGGESTION\u003c/code\u003e, and \u003ccode\u003eSTYLE_SOURCE\u003c/code\u003e . By \u003ca href=\"https://github.com/BrianPugh\"\u003e\u003ccode\u003e@​BrianPugh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/pull/814\"\u003eBrianPugh/cyclopts#814\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.0\"\u003ehttps://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.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/BrianPugh/cyclopts/commit/ea77abc99ef67dc4da21548d3b2ff2150c265afe\"\u003e\u003ccode\u003eea77abc\u003c/code\u003e\u003c/a\u003e fix zsh completion recursion when prog_name matches a builtin helper\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/e297647b12b71155d01f87e8e1d5e008c90962b6\"\u003e\u003ccode\u003ee297647\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/824\"\u003e#824\u003c/a\u003e from SAY-5/docs-fix-typer-option-import\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/923a5648ed221c1f7683810851c4ade348149fa4\"\u003e\u003ccode\u003e923a564\u003c/code\u003e\u003c/a\u003e docs: add missing typer Option imports in flag negation examples\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/ddb9cc2ec53ad103a4525e399afa92188ac81ae3\"\u003e\u003ccode\u003eddb9cc2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/823\"\u003e#823\u003c/a\u003e from BrianPugh/fish-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/bd56e32b839d9b90e060b1fd88105985194887db\"\u003e\u003ccode\u003ebd56e32\u003c/code\u003e\u003c/a\u003e fix fish completion for positional args and run fish tests in ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/fba7293a546d7569f8cb74a85badc0a8f9401691\"\u003e\u003ccode\u003efba7293\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/822\"\u003e#822\u003c/a\u003e from BrianPugh/arm-ci\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/17e22f16883a7132b9d9bc12dc18c16b726d8a73\"\u003e\u003ccode\u003e17e22f1\u003c/code\u003e\u003c/a\u003e skip global zsh rcs in completion tests\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/4cc78acd473f09d1e6267ed92f3ca24358c4b8cd\"\u003e\u003ccode\u003e4cc78ac\u003c/code\u003e\u003c/a\u003e install zsh in linux ci runs\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/5c87c2752b494e9486f422d48473d206cd6ab66e\"\u003e\u003ccode\u003e5c87c27\u003c/code\u003e\u003c/a\u003e add ubuntu-24.04-arm to the CI testing matrix\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/BrianPugh/cyclopts/commit/be2b4295f4632315ae1e49c8f3799bc71086a751\"\u003e\u003ccode\u003ebe2b429\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/BrianPugh/cyclopts/issues/819\"\u003e#819\u003c/a\u003e from BrianPugh/pep-692\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/BrianPugh/cyclopts/compare/v4.15.0...v4.16.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\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.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\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.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\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.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pydocket` from 0.20.3 to 0.21.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/chrisguidry/docket/releases\"\u003epydocket's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.21.1 - Eight misbehavin'\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eredis-py==8.0.0\u003c/code\u003e changed a default timeout that broke long-lived blocking connections (like pubsub and streams).  With this release, that's fixed and we support (and have tests for) redis-py 5.x, 6.x, 7.x, and 8.x\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport redis-py 8, and make CI actually exercise it by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/427\"\u003echrisguidry/docket#427\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.21.0...0.21.1\"\u003ehttps://github.com/chrisguidry/docket/compare/0.21.0...0.21.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.21.0 - Don't Call Me\u003c/h2\u003e\n\u003cp\u003eThis is a performance-tuning release focused on reducing how chatty Docket is with Redis, and folding several separate operations into single pipelines and scripts.\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump idna from 3.11 to 3.15 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/chrisguidry/docket/pull/418\"\u003echrisguidry/docket#418\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump pymdown-extensions from 10.21.2 to 10.21.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/chrisguidry/docket/pull/417\"\u003echrisguidry/docket#417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the all-dependencies group across 1 directory 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/chrisguidry/docket/pull/416\"\u003echrisguidry/docket#416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache Lua scripts at module scope to skip per-call SHA work by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/419\"\u003echrisguidry/docket#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFold state PUBLISH into the per-task Lua scripts by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/420\"\u003echrisguidry/docket#420\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFold the rest of the task-completion path into _terminal by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/421\"\u003echrisguidry/docket#421\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePost-release review fixes for \u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/422\"\u003echrisguidry/docket#422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLock in regression coverage for implicit invariants in the recent Lua refactor by \u003ca href=\"https://github.com/chrisguidry\"\u003e\u003ccode\u003e@​chrisguidry\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/chrisguidry/docket/pull/423\"\u003echrisguidry/docket#423\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.20.3...0.21.0\"\u003ehttps://github.com/chrisguidry/docket/compare/0.20.3...0.21.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/chrisguidry/docket/commit/cfafd7e3d8b4dd20d237b237c2b4ce78dc69ad5b\"\u003e\u003ccode\u003ecfafd7e\u003c/code\u003e\u003c/a\u003e Support redis-py 8, and make CI actually exercise it (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/427\"\u003e#427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/11ebbcd7731441c0460b00d41bdbaeb5072069bb\"\u003e\u003ccode\u003e11ebbcd\u003c/code\u003e\u003c/a\u003e Lock in regression coverage for implicit invariants in the recent Lua refacto...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/bf1fa2afc122968b6a0845e7b7edc5f112c0a79d\"\u003e\u003ccode\u003ebf1fa2a\u003c/code\u003e\u003c/a\u003e Post-release review fixes for \u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e/\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/422\"\u003e#422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/b82ef829c704d4a102b3e2b11fabf69d118e3673\"\u003e\u003ccode\u003eb82ef82\u003c/code\u003e\u003c/a\u003e Fold the rest of the task-completion path into _terminal (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/421\"\u003e#421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/1cdb6dfffe8791684f3b0abe94751a54aaa8dc63\"\u003e\u003ccode\u003e1cdb6df\u003c/code\u003e\u003c/a\u003e Fold state PUBLISH into the per-task Lua scripts (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/420\"\u003e#420\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/e95be4a45bdf87cd4c67c9c9a5fd5db83d4c8136\"\u003e\u003ccode\u003ee95be4a\u003c/code\u003e\u003c/a\u003e Cache Lua scripts at module scope to skip per-call SHA work (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/718df97071c73b84ce9b6afcd49e51b75fcbe69f\"\u003e\u003ccode\u003e718df97\u003c/code\u003e\u003c/a\u003e Bump the all-dependencies group across 1 directory with 14 updates (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/416\"\u003e#416\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/ea4077df41e2e2451f7767ced4db0aaef1c2d5c2\"\u003e\u003ccode\u003eea4077d\u003c/code\u003e\u003c/a\u003e Bump pymdown-extensions from 10.21.2 to 10.21.3 (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/417\"\u003e#417\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/chrisguidry/docket/commit/6d015281dee243fcbc9e359fdd204b0926704b02\"\u003e\u003ccode\u003e6d01528\u003c/code\u003e\u003c/a\u003e Bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/chrisguidry/docket/issues/418\"\u003e#418\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/chrisguidry/docket/compare/0.20.3...0.21.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uv` from 0.11.15 to 0.11.17\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/releases\"\u003euv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.17\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-28.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a diagnostic for \u003ccode\u003euv add\u003c/code\u003e with standard library modules (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19572\"\u003e#19572\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose \u003ccode\u003euv workspace\u003c/code\u003e and its \u003ccode\u003elist\u003c/code\u003e subcommand in help output (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19533\"\u003e#19533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove the \u0026quot;403 forbidden\u0026quot; hint to suggest \u003ccode\u003eignore-error-codes\u003c/code\u003e when applicable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19521\"\u003e#19521\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip direct URL lock freshness checks while offline (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19596\"\u003e#19596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eimport-names\u003c/code\u003e and \u003ccode\u003eimport-namespaces\u003c/code\u003e support to \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://peps.python.org/pep-0794/\"\u003ePEP 794\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19380\"\u003e#19380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003e--no-editable-package\u003c/code\u003e flag to various commands (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19584\"\u003e#19584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInfer Python version requests from source trees in \u003ccode\u003euv tool\u003c/code\u003e invocations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19577\"\u003e#19577\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd module owners to \u003ccode\u003euv workspace metadata\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19122\"\u003e#19122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not allow \u003ccode\u003euv venv --clear\u003c/code\u003e to remove non-virtual environments (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19595\"\u003e#19595\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove the performance of large entries in \u003ccode\u003etool.uv.conflicts\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19538\"\u003e#19538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid modifying the parent process' env with \u003ccode\u003e--env-file\u003c/code\u003e in \u003ccode\u003euv run\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19567\"\u003e#19567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix script environment creation for scripts with long filenames (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19539\"\u003e#19539\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix transitive Git archive dependencies in lockfiles (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19589\"\u003e#19589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve Git repository URLs in direct URL metadata (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19590\"\u003e#19590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport redirects in \u003ccode\u003e--check-url\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19594\"\u003e#19594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept case-insensitive HTML tags in \u003ccode\u003e--find-links\u003c/code\u003e parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19537\"\u003e#19537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject duplicate script metadata blocks (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19544\"\u003e#19544\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBan names like \u0026quot;python3\u0026quot; as script entry points (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19535\"\u003e#19535\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19536\"\u003e#19536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate Git LFS artifacts for Git archives (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19592\"\u003e#19592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse a relative path when creating symlinks in cache to improve relocatability (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19033\"\u003e#19033\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix malformed positional anchors in the CLI reference (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19575\"\u003e#19575\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall uv 0.11.17\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/uv/releases/download/0.11.17/uv-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/uv/releases/download/0.11.17/uv-installer.ps1 | iex\u0026quot;\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/blob/main/CHANGELOG.md\"\u003euv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.17\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-28.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd a diagnostic for \u003ccode\u003euv add\u003c/code\u003e with standard library modules (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19572\"\u003e#19572\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eExpose \u003ccode\u003euv workspace\u003c/code\u003e and its \u003ccode\u003elist\u003c/code\u003e subcommand in help output (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19533\"\u003e#19533\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eImprove the \u0026quot;403 forbidden\u0026quot; hint to suggest \u003ccode\u003eignore-error-codes\u003c/code\u003e when applicable (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19521\"\u003e#19521\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSkip direct URL lock freshness checks while offline (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19596\"\u003e#19596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eimport-names\u003c/code\u003e and \u003ccode\u003eimport-namespaces\u003c/code\u003e support to \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://peps.python.org/pep-0794/\"\u003ePEP 794\u003c/a\u003e) (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19380\"\u003e#19380\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd a \u003ccode\u003e--no-editable-package\u003c/code\u003e flag to various commands (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19584\"\u003e#19584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eInfer Python version requests from source trees in \u003ccode\u003euv tool\u003c/code\u003e invocations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19577\"\u003e#19577\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd module owners to \u003ccode\u003euv workspace metadata\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19122\"\u003e#19122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDo not allow \u003ccode\u003euv venv --clear\u003c/code\u003e to remove non-virtual environments (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19595\"\u003e#19595\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImprove the performance of large entries in \u003ccode\u003etool.uv.conflicts\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19538\"\u003e#19538\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAvoid modifying the parent process' env with \u003ccode\u003e--env-file\u003c/code\u003e in \u003ccode\u003euv run\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19567\"\u003e#19567\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix script environment creation for scripts with long filenames (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19539\"\u003e#19539\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix transitive Git archive dependencies in lockfiles (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19589\"\u003e#19589\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ePreserve Git repository URLs in direct URL metadata (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19590\"\u003e#19590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport redirects in \u003ccode\u003e--check-url\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19594\"\u003e#19594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAccept case-insensitive HTML tags in \u003ccode\u003e--find-links\u003c/code\u003e parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19537\"\u003e#19537\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject duplicate script metadata blocks (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19544\"\u003e#19544\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBan names like \u0026quot;python3\u0026quot; as script entry points (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19535\"\u003e#19535\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19536\"\u003e#19536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eValidate Git LFS artifacts for Git archives (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19592\"\u003e#19592\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse a relative path when creating symlinks in cache to improve relocatability (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19033\"\u003e#19033\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix malformed positional anchors in the CLI reference (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19575\"\u003e#19575\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\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/uv/commit/a33a629d66753e9722a0040212c004ba66ad04b4\"\u003e\u003ccode\u003ea33a629\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.17 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19599\"\u003e#19599\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/7472df8d52db05ea304652133869cccbf6115700\"\u003e\u003ccode\u003e7472df8\u003c/code\u003e\u003c/a\u003e Update conda-incubator/setup-miniconda action to v4 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19233\"\u003e#19233\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/484ba3905d0225ef1288ac46bc53ac5018596a58\"\u003e\u003ccode\u003e484ba39\u003c/code\u003e\u003c/a\u003e Do not allow \u003ccode\u003euv venv --clear\u003c/code\u003e to remove non-virtual environments (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19595\"\u003e#19595\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/71ae411ae1b53ad2a5bef0d7c0f49cfbbc48ba06\"\u003e\u003ccode\u003e71ae411\u003c/code\u003e\u003c/a\u003e Add a diagnostic for \u003ccode\u003euv add\u003c/code\u003e with standard library modules (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19572\"\u003e#19572\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/28cb0929095aac0ce097d4b97c3935d4e48b7755\"\u003e\u003ccode\u003e28cb092\u003c/code\u003e\u003c/a\u003e Add \u003ccode\u003e--no-editable-package\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19584\"\u003e#19584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/5a0b932474304d8da37ee169db02c866291dd61f\"\u003e\u003ccode\u003e5a0b932\u003c/code\u003e\u003c/a\u003e Support redirects in \u003ccode\u003e--check-url\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19594\"\u003e#19594\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/995b41e850ce0116141f4066e3f93e6d49dc39b9\"\u003e\u003ccode\u003e995b41e\u003c/code\u003e\u003c/a\u003e Encapsulate Git HTTP fetch settings (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19597\"\u003e#19597\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/727d2b84f20d6c78e12d4c12f750d973f695e334\"\u003e\u003ccode\u003e727d2b8\u003c/code\u003e\u003c/a\u003e Add module owners to workspace metadata (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19122\"\u003e#19122\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4e25ecad0d7c33e8b00dcf84af54ff54fe30e3e7\"\u003e\u003ccode\u003e4e25eca\u003c/code\u003e\u003c/a\u003e Skip direct URL lock freshness checks while offline (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19596\"\u003e#19596\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/da5f6a6967b41423fb2a61bf094adff4e403367c\"\u003e\u003ccode\u003eda5f6a6\u003c/code\u003e\u003c/a\u003e Infer Python version requests from source trees in \u003ccode\u003euv tool\u003c/code\u003e invocations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19\"\u003e#19\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/uv/compare/0.11.15...0.11.17\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `redis` from 7.4.0 to 8.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/redis/redis-py/releases\"\u003eredis's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.0.0\u003c/h2\u003e\n\u003ch1\u003eChanges\u003c/h1\u003e\n\u003ch2\u003e🚀 Highlights\u003c/h2\u003e\n\u003ch3\u003eAsync Cluster PubSub\u003c/h3\u003e\n\u003cp\u003eThis release introduces full \u003cstrong\u003easyncio Cluster PubSub support\u003c/strong\u003e, bringing shard-channel capabilities (\u003ccode\u003eSSUBSCRIBE\u003c/code\u003e, \u003ccode\u003eSUNSUBSCRIBE\u003c/code\u003e, \u003ccode\u003eSPUBLISH\u003c/code\u003e) to the async \u003ccode\u003eRedisCluster\u003c/code\u003e client. The new \u003ccode\u003eClusterPubSub\u003c/code\u003e class in \u003ccode\u003eredis.asyncio.cluster\u003c/code\u003e automatically routes shard-channel subscriptions to the correct cluster node based on key-slot hashing, manages per-node PubSub connections, and supports round-robin message retrieval across nodes. Users can create a cluster pubsub instance via \u003ccode\u003eRedisCluster.pubsub()\u003c/code\u003e and use \u003ccode\u003essubscribe()\u003c/code\u003e, \u003ccode\u003esunsubscribe()\u003c/code\u003e, and \u003ccode\u003eget_sharded_message()\u003c/code\u003e just as they would with the sync cluster client.\u003c/p\u003e\n\u003ch3\u003eKeyspace and subkey notifications\u003c/h3\u003e\n\u003cp\u003eRedis Keyspace Notifications are now supported for standalone and cluster deployments in both sync and async modes. New classes — \u003ccode\u003eKeyspaceNotifications\u003c/code\u003e, \u003ccode\u003eClusterKeyspaceNotifications\u003c/code\u003e, \u003ccode\u003eAsyncKeyspaceNotifications\u003c/code\u003e, and \u003ccode\u003eAsyncClusterKeyspaceNotifications\u003c/code\u003e — provide a high-level API for keyspace/keyevent subscriptions and subkey notification families: \u003ccode\u003esubkeyspace\u003c/code\u003e, \u003ccode\u003esubkeyevent\u003c/code\u003e, \u003ccode\u003esubkeyspaceitem\u003c/code\u003e, and \u003ccode\u003esubkeyspaceevent\u003c/code\u003e. Convenience methods like \u003ccode\u003esubscribe_keyspace()\u003c/code\u003e, \u003ccode\u003esubscribe_keyevent()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyspace()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyevent()\u003c/code\u003e, \u003ccode\u003esubscribe_subkeyspaceitem()\u003c/code\u003e, and \u003ccode\u003esubscribe_subkeyspaceevent()\u003c/code\u003e simplify common patterns, with channel classes for both key and subkey channels.\u003c/p\u003e\n\u003cp\u003eIn cluster mode, subscriptions are managed across primary nodes because each node emits notifications only for keys it owns, with built-in topology-change handling. Sync \u003ccode\u003erun_in_thread()\u003c/code\u003e and async \u003ccode\u003elisten()\u003c/code\u003e workflows are supported.\u003c/p\u003e\n\u003ch3\u003eRedis Array commands(\u003ca href=\"https://redis.io/docs/latest/develop/data-types/arrays/\"\u003ehttps://redis.io/docs/latest/develop/data-types/arrays/\u003c/a\u003e)\u003c/h3\u003e\n\u003cp\u003eredis-py now supports \u003ca href=\"https://redis.io/docs/latest/develop/data-types/arrays/\"\u003eRedis Arrays\u003c/a\u003e, a preview Redis data type for sparse, index-addressable sequences of strings. New \u003ccode\u003eAR*\u003c/code\u003e command helpers cover indexed reads/writes, range scans, deletion, cursor-based insertion, ring-buffer writes, metadata, text search, and aggregation, including \u003ccode\u003eARGET\u003c/code\u003e, \u003ccode\u003eARSET\u003c/code\u003e, \u003ccode\u003eARMGET\u003c/code\u003e, \u003ccode\u003eARMSET\u003c/code\u003e, \u003ccode\u003eARSCAN\u003c/code\u003e, \u003ccode\u003eARGREP\u003c/code\u003e, \u003ccode\u003eARRING\u003c/code\u003e, and \u003ccode\u003eAROP\u003c/code\u003e.\u003c/p\u003e\n\u003ch3\u003eType Hints Improvements (breaking changes)\u003c/h3\u003e\n\u003cp\u003eThe \u003ccode\u003e@overload\u003c/code\u003e pattern has been applied systematically across \u003cstrong\u003ecore commands\u003c/strong\u003e (\u003ccode\u003ecore.py\u003c/code\u003e), \u003cstrong\u003eVectorSet commands\u003c/strong\u003e, and \u003cstrong\u003emodule commands\u003c/strong\u003e (Search, JSON, TimeSeries, Bloom filters) to provide distinct return types for sync and async clients. Previously, methods returned a combined \u003ccode\u003eResponseT\u003c/code\u003e (i.e., \u003ccode\u003eUnion[Awaitable[Any], Any]\u003c/code\u003e), which caused static analysis tools like mypy and Pyright to flag false positives. Now, sync clients see concrete return types (e.g., \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003ebool\u003c/code\u003e, \u003ccode\u003elist[str]\u003c/code\u003e) while async clients see \u003ccode\u003eAwaitable[...]\u003c/code\u003e wrappers. This is a \u003cstrong\u003ebreaking change for type-checking only\u003c/strong\u003e—runtime behavior is unchanged, but code relying on the old union return types in type annotations may need updates. Two new protocol types, \u003ccode\u003eSyncClientProtocol\u003c/code\u003e and \u003ccode\u003eAsyncClientProtocol\u003c/code\u003e, are used in overload signatures to enable this distinction.\u003c/p\u003e\n\u003ch3\u003eRESP3 by default with opt-in unified responses\u003c/h3\u003e\n\u003cp\u003eredis-py 8.0.0 now uses RESP3 on the wire by default while preserving legacy RESP2-compatible Python response shapes for existing applications (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4052\"\u003e#4052\u003c/a\u003e). Protocol-independent unified response shapes are available by setting \u003ccode\u003elegacy_responses=False\u003c/code\u003e, so affected commands return the same Python structure with RESP2 or RESP3.\u003c/p\u003e\n\u003cp\u003eUse \u003ccode\u003eprotocol=2\u003c/code\u003e to force RESP2 on the wire, \u003ccode\u003eprotocol=3\u003c/code\u003e to opt into native RESP3 response shapes, or \u003ccode\u003elegacy_responses=False\u003c/code\u003e to migrate to unified responses. See \u003ca href=\"https://github.com/redis/redis-py/blob/HEAD/docs/unified_responses.rst\"\u003e\u003ccode\u003ehttps://github.com/redis/redis-py/blob/HEAD/docs/unified_responses.rst\u003c/code\u003e\u003c/a\u003e and \u003ca href=\"https://github.com/redis/redis-py/blob/HEAD/specs/unified_responses_migration_guide.md\"\u003e\u003ccode\u003ehttps://github.com/redis/redis-py/blob/HEAD/specs/unified_responses_migration_guide.md\u003c/code\u003e\u003c/a\u003e for the affected commands and migration details.\u003c/p\u003e\n\u003ch3\u003eConnection and retry defaults\u003c/h3\u003e\n\u003cp\u003eDefault connection settings were updated: \u003ccode\u003esocket_timeout\u003c/code\u003e and \u003ccode\u003esocket_connect_timeout\u003c/code\u003e now default to 5 seconds, TCP keepalive is enabled by default, socket reads use a 32 KB buffer, connection pools default to \u003ccode\u003emax_connections=100\u003c/code\u003e, and retry defaults now use 10 attempts with exponential jitter backoff.\u003c/p\u003e\n\u003cp\u003eNote: \u003ccode\u003esocket_timeout\u003c/code\u003e can affect blocking commands such as \u003ccode\u003eBLPOP\u003c/code\u003e/\u003ccode\u003eBRPOP\u003c/code\u003e; if a command blocks longer than the client socket timeout, it may raise \u003ccode\u003eTimeoutError\u003c/code\u003e before the command timeout elapses (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/2807\"\u003e#2807\u003c/a\u003e).\u003c/p\u003e\n\u003ch2\u003e🧪 Experimental Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded support for new array commands (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4055\"\u003e#4055\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e🚀 New Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport Cluster PubSub in asyncio (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3736\"\u003e#3736\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd Redis Keyspace Notifications Support for Redis Cluster (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/3962\"\u003e#3962\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd random load balancing strategy which allows for use of the primary (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4027\"\u003e#4027\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd FPHA (floating-point homogeneous array) arg support to JSON.SET (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4011\"\u003e#4011\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded custom Claude command + XNACK command support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4030\"\u003e#4030\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding Time Series Multiple Aggregators support (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4035\"\u003e#4035\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding support for new COUNT aggregator for some sorted set commands - ZINTER, ZINTERSTORE, ZUNION, ZUNIONSTORE (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4034\"\u003e#4034\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdding support for new INCREX command (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4067\"\u003e#4067\u003c/a\u003e \u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4077\"\u003e#4077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for PubSub subscriptions with binary channel names and handlers (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4068\"\u003e#4068\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/redis/redis-py/commit/733f80ec633d6a772a6e1ccb1c0cca6fc1afb4b6\"\u003e\u003ccode\u003e733f80e\u003c/code\u003e\u003c/a\u003e Updates in default connection and retry settings (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4082\"\u003e#4082\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/a68a16c296591e902d0c749d31781550048f280f\"\u003e\u003ccode\u003ea68a16c\u003c/code\u003e\u003c/a\u003e Updating Redis supported versions in README.md and lib version to 8.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/43a41d3d2956aa69eb0041655067ffaaaf23c6c3\"\u003e\u003ccode\u003e43a41d3\u003c/code\u003e\u003c/a\u003e Updating INCREX command arg - SATURATE now controls overflow behaviour (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4077\"\u003e#4077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/1496deba3801605cb123cb1b67adda50e85cd1e5\"\u003e\u003ccode\u003e1496deb\u003c/code\u003e\u003c/a\u003e Preserve explicit None for client metadata config (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4081\"\u003e#4081\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/57dc08c550f82086afeaa68a7cd7e5df356f7217\"\u003e\u003ccode\u003e57dc08c\u003c/code\u003e\u003c/a\u003e Avoid zero-timeout async reads in hiredis connections readiness checks and re...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/cd54ddd25aa307dc7f05bc0e4387cfc294c0a4c8\"\u003e\u003ccode\u003ecd54ddd\u003c/code\u003e\u003c/a\u003e fix(typing): correct type annotation for XReadResponse (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4046\"\u003e#4046\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/ab2d41fcf0f9477ac788822d7c430004076a27f2\"\u003e\u003ccode\u003eab2d41f\u003c/code\u003e\u003c/a\u003e Add support for PubSub subscriptions with binary channel names and handlers (...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/ef24dc99b6f2aa9507f19aa4ce4be37745ed6c77\"\u003e\u003ccode\u003eef24dc9\u003c/code\u003e\u003c/a\u003e Randomize cluster startup node order during topology refresh (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4060\"\u003e#4060\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/b604015aeb5abce4b576f9dc54ffe30a3f1ba8c6\"\u003e\u003ccode\u003eb604015\u003c/code\u003e\u003c/a\u003e Add CLAUDE.md and /sync-claude-md skill for managing (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4066\"\u003e#4066\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/redis/redis-py/commit/2b8b4fcc9986fbc1f188cc6a355d12eec814ee90\"\u003e\u003ccode\u003e2b8b4fc\u003c/code\u003e\u003c/a\u003e Fix flaky tests (\u003ca href=\"https://redirect.github.com/redis/redis-py/issues/4071\"\u003e#4071\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/redis/redis-py/compare/v7.4.0...v8.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `virtualenv` from 21.3.3 to 21.4.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/virtualenv/releases\"\u003evirtualenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.4.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🐛 fix(create): debug build venvlauncher lookup on Windows 3.13+ by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3151\"\u003epypa/virtualenv#3151\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.4.0...21.4.1\"\u003ehttps://github.com/pypa/virtualenv/compare/21.4.0...21.4.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e21.4.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix Mermaid flowchart rendering by \u003ca href=\"https://github.com/Herrtian\"\u003e\u003ccode\u003e@​Herrtian\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3147\"\u003epypa/virtualenv#3147\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e♻️ refactor(create): remove dead code and document droppable paths by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3149\"\u003epypa/virtualenv#3149\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(create): support Windows debug builds and remove dead code by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3150\"\u003epypa/virtualenv#3150\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/Herrtian\"\u003e\u003ccode\u003e@​Herrtian\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3147\"\u003epypa/virtualenv#3147\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.3.3...21.4.0\"\u003ehttps://github.com/pypa/virtualenv/compare/21.3.3...21.4.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst\"\u003evirtualenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eBugfixes - 21.4.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix Windows debug build \u003ccode\u003evenvlauncher_d.exe\u003c/code\u003e substitution never triggering because \u003ccode\u003eexecutables()\u003c/code\u003e compared the\nsource executable name instead of the target name, and fix \u003ccode\u003eAttributeError\u003c/code\u003e on \u003ccode\u003edebug_build\u003c/code\u003e attribute for\ninterpreter info objects missing the field - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e3151\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev21.4.0 (2026-05-28)\u003c/p\u003e\n\u003chr /\u003e\n\u003ch1\u003eFeatures - 21.4.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eRemove dead code targeting Python versions below the supported target range (PyPy 3.6, deprecated importlib APIs) and\nsimplify the runtime import hook in \u003ccode\u003e_virtualenv.py\u003c/code\u003e - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e3149\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Windows debug builds (\u003ccode\u003epython_d.exe\u003c/code\u003e, \u003ccode\u003evenvlauncher_d.exe\u003c/code\u003e) matching CPython venv behavior, remove dead\n\u003ccode\u003e__SCRIPT_DIR__\u003c/code\u003e replacement and \u003ccode\u003ehas_shim\u003c/code\u003e version guard, drop unreachable Python 3.7 branch from\n\u003ccode\u003epyvenv_launch_patch_active\u003c/code\u003e, and fix wheel deprecation message to say \u003ccode\u003e\u0026gt;= 3.9\u003c/code\u003e - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e.\n(:issue:\u003ccode\u003e3150\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev21.3.3 (2026-05-13)\u003c/p\u003e\n\u003chr /\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/e88f194c574fba787a9f44a0568042974d45a539\"\u003e\u003ccode\u003ee88f194\u003c/code\u003e\u003c/a\u003e release 21.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/6a2d79cd8077035a8a9d08b8501975eead13b496\"\u003e\u003ccode\u003e6a2d79c\u003c/code\u003e\u003c/a\u003e 🐛 fix(create): debug build venvlauncher lookup on Windows 3.13+ (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3151\"\u003e#3151\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/30bcf62a65d262b85f3272a7f9b91397f712a13b\"\u003e\u003ccode\u003e30bcf62\u003c/code\u003e\u003c/a\u003e release 21.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/61434984154e4474c478301e433071efd880ad8c\"\u003e\u003ccode\u003e6143498\u003c/code\u003e\u003c/a\u003e ✨ feat(create): support Windows debug builds and remove dead code (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3150\"\u003e#3150\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/ceaf88f8736c253ca71d155bb08b8475deebda02\"\u003e\u003ccode\u003eceaf88f\u003c/code\u003e\u003c/a\u003e ♻️ refactor(create): remove dead code and document droppable paths (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3149\"\u003e#3149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http...\n\n_Description has been truncated_","html_url":"https://github.com/Beaconchain-us/prefect/pull/15","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Beaconchain-us%2Fprefect/issues/15","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/15/packages"}},{"old_version":"6.2.4","new_version":"7.1.4","update_type":"major","path":null,"pr_created_at":"2026-05-26T00:18:19.000Z","version_change":"6.2.4 → 7.1.4","issue":{"uuid":"4520292152","node_id":"PR_kwDOSnyC9c7fNY-Z","number":49,"state":"open","title":"Bump cachetools from 6.2.4 to 7.1.4","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-05-26T00:18:19.000Z","updated_at":"2026-05-26T00:18:20.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","packages":[{"name":"cachetools","old_version":"6.2.4","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.4 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!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/v6.2.4...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=pip\u0026previous-version=6.2.4\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/WilsonMariano/geonode/pull/49","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilsonMariano%2Fgeonode/issues/49","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/49/packages"}},{"old_version":"7.1.2","new_version":"7.1.4","update_type":"patch","path":"/apps/api","pr_created_at":"2026-05-25T08:29:52.000Z","version_change":"7.1.2 → 7.1.4","issue":{"uuid":"4515496989","node_id":"PR_kwDOR9avIM7e93MM","number":98,"state":"closed","title":"chore(api)(deps): Bump the python-minor-and-patch group in /apps/api with 4 updates","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-25T08:30:44.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-25T08:29:52.000Z","updated_at":"2026-05-25T08:30:53.000Z","time_to_close":52,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(api)(deps): Bump","group_name":"python-minor-and-patch","update_count":4,"packages":[{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0"},{"name":"cachetools","old_version":"7.1.2","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"pyjwt","old_version":"2.12.1","new_version":"2.13.0","repository_url":"https://github.com/jpadilla/pyjwt"}],"path":"/apps/api","ecosystem":"pip"},"body":"Bumps the python-minor-and-patch group in /apps/api with 4 updates: [fastapi](https://github.com/fastapi/fastapi), [uvicorn[standard]](https://github.com/Kludex/uvicorn), [cachetools](https://github.com/tkem/cachetools) and [pyjwt](https://github.com/jpadilla/pyjwt).\n\nUpdates `fastapi` from 0.136.1 to 0.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uvicorn[standard]` from 0.47.0 to 0.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn[standard]'s releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\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[standard]'s changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.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.1.2 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.2...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyjwt` from 2.12.1 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\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__\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/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\u003eSee full diff in \u003ca href=\"https://github.com/jpadilla/pyjwt/compare/2.12.1...2.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n\u003c/details\u003e","html_url":"https://github.com/gofrolist/project-800ms/pull/98","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/gofrolist%2Fproject-800ms/issues/98","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/98/packages"}},{"old_version":"7.1.3","new_version":"7.1.4","update_type":"patch","path":null,"pr_created_at":"2026-05-25T04:55:55.000Z","version_change":"7.1.3 → 7.1.4","issue":{"uuid":"4514371304","node_id":"PR_kwDODcMJdM7e6PX8","number":22619,"state":"open","title":"core: bump cachetools from 7.1.3 to 7.1.4","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-25T04:55:55.000Z","updated_at":"2026-05-25T05:11:29.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"core","packages":[{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=uv\u0026previous-version=7.1.3\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/goauthentik/authentik/pull/22619","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/goauthentik%2Fauthentik/issues/22619","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/22619/packages"}},{"old_version":"\u003e=7.1.1","new_version":"\u003e=7.1.4","update_type":"patch","path":"/scripts","pr_created_at":"2026-05-25T01:27:29.000Z","version_change":"\u003e=7.1.1 → \u003e=7.1.4","issue":{"uuid":"4513648139","node_id":"PR_kwDORJUzUs7e39tL","number":930,"state":"open","title":"chore(deps): update cachetools requirement from \u003e=7.1.1 to \u003e=7.1.4 in /scripts","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-25T01:27:29.000Z","updated_at":"2026-05-25T01:27:32.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): update","packages":[{"name":"cachetools","old_version":"\u003e=7.1.1","new_version":"\u003e=7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":"/scripts","ecosystem":"pip"},"body":"Updates the requirements on [cachetools](https://github.com/tkem/cachetools) to permit the latest version.\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!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.1.1...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/Twodragon0/investing/pull/930","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Twodragon0%2Finvesting/issues/930","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/930/packages"}},{"old_version":"6.2.6","new_version":"7.1.1","update_type":"major","path":"/python","pr_created_at":"2026-05-25T00:31:53.000Z","version_change":"6.2.6 → 7.1.1","issue":{"uuid":"4513459089","node_id":"PR_kwDOPi7ob87e3YRZ","number":334,"state":"open","title":"fix(deps): Bump cachetools from 6.2.6 to 7.1.1 in /python","user":"dependabot[bot]","labels":["dependencies"],"assignees":[],"locked":false,"comments_count":3,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-25T00:31:53.000Z","updated_at":"2026-05-25T00:33:45.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"fix(deps): Bump","packages":[{"name":"cachetools","old_version":"6.2.6","new_version":"7.1.1","repository_url":"https://github.com/tkem/cachetools"}],"path":"/python","ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 6.2.6 to 7.1.1.\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.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\u003ch1\u003ev7.0.5 (2026-03-09)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMinor \u003ccode\u003e@cachedmethod\u003c/code\u003e performance improvements.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.4 (2026-03-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix and properly document \u003ccode\u003e@cachedmethod.cache_key\u003c/code\u003e behavior.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMinor documentation improvements.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.3 (2026-03-05)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eDeprecationWarning\u003c/code\u003e when creating an autospec mock with\n\u003ccode\u003e@cachedmethod\u003c/code\u003e decorations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev7.0.2 (2026-03-02)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eProvide more efficient \u003ccode\u003eclear()\u003c/code\u003e implementation for all support\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/2e6a2d21c44e83b56c06cc9dd738e5b7a097ce6a\"\u003e\u003ccode\u003e2e6a2d2\u003c/code\u003e\u003c/a\u003e Release v7.1.1.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/cc065582849e3658d2c92aac0f5c2b6271ed077f\"\u003e\u003ccode\u003ecc06558\u003c/code\u003e\u003c/a\u003e Minor typing improvements.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/193dd62d9be4e1099039e8fba59a1fe50e8f4d08\"\u003e\u003ccode\u003e193dd62\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/393\"\u003e#393\u003c/a\u003e: Improve ambiguous overloads for decorators.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/1ea3422e058ef8b6b7dc15beb9d44d8f7c195a62\"\u003e\u003ccode\u003e1ea3422\u003c/code\u003e\u003c/a\u003e Bump release date.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/d9874465a6ab6f9d1d56cef91370f9c237a7eca6\"\u003e\u003ccode\u003ed987446\u003c/code\u003e\u003c/a\u003e Release v7.1.0.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/3d79e80a4a54892d1552cd17da8e27920c1918d8\"\u003e\u003ccode\u003e3d79e80\u003c/code\u003e\u003c/a\u003e Update Copilot Instructions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/83fe6bc78d0155a0036dda8a8eb1a2ddb8f26c60\"\u003e\u003ccode\u003e83fe6bc\u003c/code\u003e\u003c/a\u003e Add tox pyright check.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/bd3fbc49212eb948e08e9c478e5901f1293fd1f4\"\u003e\u003ccode\u003ebd3fbc4\u003c/code\u003e\u003c/a\u003e Improve typing support.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/09dd6fec4b1b2339451ab26d1ca3c7a049b8c38c\"\u003e\u003ccode\u003e09dd6fe\u003c/code\u003e\u003c/a\u003e Improve original type stubs from typeshed.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/873c7013ea92b16f2f24a6001e625fabfdf951a5\"\u003e\u003ccode\u003e873c701\u003c/code\u003e\u003c/a\u003e Add typeshed typings.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v6.2.6...v7.1.1\"\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=cachetools\u0026package-manager=pip\u0026previous-version=6.2.6\u0026new-version=7.1.1)](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\n\n🤖 **Auto-generated PR Summary**\n\n## 📝 Changes Summary\n\n### Recent Commits:\n- a022af7 fix(deps): Bump cachetools from 6.2.6 to 7.1.1 in /python\n\n## 📁 Files Changed\n\n**Total files changed: 1**\n\n- 📄 **Other**: 1 files\n\n\u003cdetails\u003e\n\u003csummary\u003e📋 Detailed File List\u003c/summary\u003e\n\n#### 🧪 Tests\n\n\n#### 📚 Documentation\n\n\n#### 🔧 Source Code\n\n\n#### ⚙️ Configuration\n\n\n#### 📄 Other Files\n\n- `python/requirements.txt`\n\n\u003c/details\u003e\n\n## 🏷️ Change Type\n\n\n## ✅ Review Checklist\n\n- [ ] Code follows project conventions (Biome linting)\n- [ ] TypeScript types are properly defined\n- [ ] Tests are added/updated for new functionality\n- [ ] Documentation is updated if necessary\n- [ ] All CI checks pass\n- [ ] Breaking changes are documented\n\n---\n\n*🤖 This description was automatically generated from code changes*","html_url":"https://github.com/ksleep98/napoleon-game-4players/pull/334","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ksleep98%2Fnapoleon-game-4players/issues/334","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/334/packages"}},{"old_version":"7.1.3","new_version":"7.1.4","update_type":"patch","path":null,"pr_created_at":"2026-05-24T18:25:58.000Z","version_change":"7.1.3 → 7.1.4","issue":{"uuid":"4512532378","node_id":"PR_kwDOSXLGM87e0lKU","number":11,"state":"closed","title":"chore(deps): bump the uv-dependencies group across 1 directory with 6 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":2,"pull_request":true,"closed_at":"2026-05-31T04:32:17.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-24T18:25:58.000Z","updated_at":"2026-05-31T04:32:19.000Z","time_to_close":554779,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): bump","group_name":"uv-dependencies","update_count":6,"packages":[{"name":"click","old_version":"8.4.0","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"fastapi","old_version":"0.136.1","new_version":"0.136.3","repository_url":"https://github.com/fastapi/fastapi"},{"name":"uvicorn","old_version":"0.47.0","new_version":"0.48.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"uv","old_version":"0.11.15","new_version":"0.11.16","repository_url":"https://github.com/astral-sh/uv"},{"name":"pytest-codspeed","old_version":"5.0.2","new_version":"5.0.3","repository_url":"https://github.com/CodSpeedHQ/pytest-codspeed"}],"path":null,"ecosystem":"pip"},"body":"Bumps the uv-dependencies group with 6 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [click](https://github.com/pallets/click) | `8.4.0` | `8.4.1` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.3` | `7.1.4` |\n| [fastapi](https://github.com/fastapi/fastapi) | `0.136.1` | `0.136.3` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.47.0` | `0.48.0` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.15` | `0.11.16` |\n| [pytest-codspeed](https://github.com/CodSpeedHQ/pytest-codspeed) | `5.0.2` | `5.0.3` |\n\n\nUpdates `click` from 8.4.0 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\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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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.4.0...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `cachetools` from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\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.136.3\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.136.3\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (the default). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15589\"\u003e#15589\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.136.2\u003c/h2\u003e\n\u003ch3\u003eRefactors\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e♻️ Validate Server Sent Event fields to avoid applications from sending broken data. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15588\"\u003e#15588\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📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15464\"\u003e#15464\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📝 Update and simplify docs about help and management. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15583\"\u003e#15583\u003c/a\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 docs references to central contributing docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15580\"\u003e#15580\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update security policy. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15577\"\u003e#15577\u003c/a\u003e 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: TalorData image. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15562\"\u003e#15562\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Update docs, simplify usage of admonitions, only default ones. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15553\"\u003e#15553\u003c/a\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 image URLs in \u003ccode\u003eindex.md\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15534\"\u003e#15534\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 Azkaban spelling typo in \u003ccode\u003evirtual-environments.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15463\"\u003e#15463\u003c/a\u003e by \u003ca href=\"https://github.com/isaacbernat\"\u003e\u003ccode\u003e@​isaacbernat\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Improve layout and styling. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15462\"\u003e#15462\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e💄 Refactor opinions section with interactive tabs and new logos. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15458\"\u003e#15458\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e📝 Add FastAPI Conf '26 announcement to docs. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15457\"\u003e#15457\u003c/a\u003e by \u003ca href=\"https://github.com/alejsdev\"\u003e\u003ccode\u003e@​alejsdev\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🌐 Improve translation consistency in \u003ccode\u003e‎docs/pt/docs/advanced/generate-clients.md‎\u003c/code\u003e. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15456\"\u003e#15456\u003c/a\u003e by \u003ca href=\"https://github.com/Will-thom\"\u003e\u003ccode\u003e@​Will-thom\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/15530\"\u003e#15530\u003c/a\u003e 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/15529\"\u003e#15529\u003c/a\u003e 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/15528\"\u003e#15528\u003c/a\u003e 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/15527\"\u003e#15527\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🌐 Update translations for tr (update-outdated). PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15526\"\u003e#15526\u003c/a\u003e 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/15525\"\u003e#15525\u003c/a\u003e 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/15524\"\u003e#15524\u003c/a\u003e 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/15522\"\u003e#15522\u003c/a\u003e 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/15523\"\u003e#15523\u003c/a\u003e 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/15520\"\u003e#15520\u003c/a\u003e 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/15521\"\u003e#15521\u003c/a\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 typos in Spanish LLM-prompt. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15472\"\u003e#15472\u003c/a\u003e by \u003ca href=\"https://github.com/crr004\"\u003e\u003ccode\u003e@​crr004\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eInternal\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e✅ Update tests, don't double dispose the engine. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15587\"\u003e#15587\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⚡️ Speed up test suite via caching and fixture scopes to make it ~24% faster. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/13583\"\u003e#13583\u003c/a\u003e by \u003ca href=\"https://github.com/dikos1337\"\u003e\u003ccode\u003e@​dikos1337\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔥 Remove config files now in central GitHub repo. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15585\"\u003e#15585\u003c/a\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 urllib3 from 2.6.3 to 2.7.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15502\"\u003e#15502\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 idna from 3.11 to 3.15. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15565\"\u003e#15565\u003c/a\u003e by \u003ca href=\"https://github.com/apps/dependabot\"\u003e\u003ccode\u003e@​dependabot[bot]\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e⬆ Bump cloudflare/wrangler-action from 3.15.0 to 4.0.0. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15571\"\u003e#15571\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🔧 Migrate docs from MkDocs to Zensical. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15563\"\u003e#15563\u003c/a\u003e by \u003ca href=\"https://github.com/tiangolo\"\u003e\u003ccode\u003e@​tiangolo\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e🔒️ Only allow team members to modify dependencies. PR \u003ca href=\"https://redirect.github.com/fastapi/fastapi/pull/15548\"\u003e#15548\u003c/a\u003e by \u003ca href=\"https://github.com/svlandeg\"\u003e\u003ccode\u003e@​svlandeg\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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/82064857539e6286522c347b4b11331b48dd2378\"\u003e\u003ccode\u003e8206485\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c910e0139f983d0e04e2d1d235cd71803afeae34\"\u003e\u003ccode\u003ec910e01\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/063b5bf582d31fb155cc6bc6f88cf512329d0fd5\"\u003e\u003ccode\u003e063b5bf\u003c/code\u003e\u003c/a\u003e ♻️ Do not accept underscore headers when using \u003ccode\u003econvert_underscores=True\u003c/code\u003e (th...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/22b02e26f9e8c7e32bd8266e2b0ebe8bb3a0db2b\"\u003e\u003ccode\u003e22b02e2\u003c/code\u003e\u003c/a\u003e 🔖 Release version 0.136.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3b252a2a22ba27a8ab83d6bde7d9cddbc5bf738e\"\u003e\u003ccode\u003e3b252a2\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/c7fb7851b3389f24c51701d705458989be53ccbb\"\u003e\u003ccode\u003ec7fb785\u003c/code\u003e\u003c/a\u003e ♻️ Validate Server Sent Event fields to avoid applications from sending broke...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/cb83b83dcf78eab4ea17d504db5abcda705fbdc4\"\u003e\u003ccode\u003ecb83b83\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/00f805cec94c0bf48c1f9a563535a3ab2e6f90ab\"\u003e\u003ccode\u003e00f805c\u003c/code\u003e\u003c/a\u003e ✅ Update tests, don't double dispose the engine (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15587\"\u003e#15587\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/3675137523dc167981aa3a3c44599b4f3079ccd8\"\u003e\u003ccode\u003e3675137\u003c/code\u003e\u003c/a\u003e 📝 Update release notes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/fastapi/fastapi/commit/7b57e42986bb4d40c9eb6580537d13fb8e76097e\"\u003e\u003ccode\u003e7b57e42\u003c/code\u003e\u003c/a\u003e 📝 Document \u003ccode\u003e--entrypoint\u003c/code\u003e CLI option (\u003ca href=\"https://redirect.github.com/fastapi/fastapi/issues/15464\"\u003e#15464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/fastapi/fastapi/compare/0.136.1...0.136.3\"\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.48.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/Kludex/uvicorn/releases\"\u003euvicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 0.48.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2940\"\u003eKludex/uvicorn#2940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e by \u003ca href=\"https://github.com/Kludex\"\u003e\u003ccode\u003e@​Kludex\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/Kludex/uvicorn/pull/2944\"\u003eKludex/uvicorn#2944\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ehttps://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\u003c/a\u003e\u003c/p\u003e\n\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.48.0 (May 24, 2026)\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDefault \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eIgnore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/73e84e58d7f6b8b3dfd8a9e3e42d716862250f33\"\u003e\u003ccode\u003e73e84e5\u003c/code\u003e\u003c/a\u003e Version 0.48.0 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2951\"\u003e#2951\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/45ea11690b4a62fa6df339d2b6ee3b8545a418e0\"\u003e\u003ccode\u003e45ea116\u003c/code\u003e\u003c/a\u003e Ignore duplicate forwarding headers in \u003ccode\u003eProxyHeadersMiddleware\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2944\"\u003e#2944\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/dd4394c3cbfd9f27a696a7b08047149690058158\"\u003e\u003ccode\u003edd4394c\u003c/code\u003e\u003c/a\u003e chore(deps): bump idna from 3.11 to 3.15 (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2941\"\u003e#2941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/Kludex/uvicorn/commit/abe07818a191cd036dc3824d802d052207e01c7e\"\u003e\u003ccode\u003eabe0781\u003c/code\u003e\u003c/a\u003e Default \u003ccode\u003essl_ciphers\u003c/code\u003e to \u003ccode\u003eNone\u003c/code\u003e and use OpenSSL defaults (\u003ca href=\"https://redirect.github.com/Kludex/uvicorn/issues/2940\"\u003e#2940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/Kludex/uvicorn/compare/0.47.0...0.48.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uv` from 0.11.15 to 0.11.16\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/releases\"\u003euv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow disabling reading the system config with \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19476\"\u003e#19476\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure that incompatible wheel hints do not leak secrets (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19504\"\u003e#19504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unsafe entry points in \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19495\"\u003e#19495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict delimiters in entry point parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19471\"\u003e#19471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euv-netrc: fix multi-word no-space comment lines causing parse errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19494\"\u003e#19494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument and test relative exclude-newer support for uv pip (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19475\"\u003e#19475\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall uv 0.11.16\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/uv/releases/download/0.11.16/uv-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload uv 0.11.16\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFile\u003c/th\u003e\n\u003cth\u003ePlatform\u003c/th\u003e\n\u003cth\u003eChecksum\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-aarch64-apple-darwin.tar.gz\"\u003euv-aarch64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eApple Silicon macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-aarch64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/blob/main/CHANGELOG.md\"\u003euv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow disabling reading the system config with \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19476\"\u003e#19476\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure that incompatible wheel hints do not leak secrets (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19504\"\u003e#19504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unsafe entry points in \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19495\"\u003e#19495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict delimiters in entry point parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19471\"\u003e#19471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euv-netrc: fix multi-word no-space comment lines causing parse errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19494\"\u003e#19494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument and test relative exclude-newer support for uv pip (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19475\"\u003e#19475\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/135a3636789bb6886e0a7876f58cb4dbb270ba6d\"\u003e\u003ccode\u003e135a363\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.16 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19522\"\u003e#19522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/3b5f99412c7050f1050c09d2b7a48f82c333adfa\"\u003e\u003ccode\u003e3b5f994\u003c/code\u003e\u003c/a\u003e Add a \u003ccode\u003euv lock\u003c/code\u003e check to CI (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19524\"\u003e#19524\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4ffb506acf2b3d4dfd9a343a3cee53abe63a4de7\"\u003e\u003ccode\u003e4ffb506\u003c/code\u003e\u003c/a\u003e Improve crates.io new crate error message (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19523\"\u003e#19523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/51ba989e678ba1558ed48e1ea3e66d01a6dc30b3\"\u003e\u003ccode\u003e51ba989\u003c/code\u003e\u003c/a\u003e Add support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c07a6efb380b2ecd39161194aa7f3bb5d3f967ca\"\u003e\u003ccode\u003ec07a6ef\u003c/code\u003e\u003c/a\u003e Reject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/58a6734719d19da5335a5985843435745ff93320\"\u003e\u003ccode\u003e58a6734\u003c/code\u003e\u003c/a\u003e Allow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c1477e2b0f9e0ef510554ebfdf76aa68d477dfe6\"\u003e\u003ccode\u003ec1477e2\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e in tests to avoid reading machine-global config (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4648a0b9e67c2abfd5aa1404d2daeac800b987f5\"\u003e\u003ccode\u003e4648a0b\u003c/code\u003e\u003c/a\u003e uv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/e2375abfe10d0e2326bf29c5f425b38f71ebf7db\"\u003e\u003ccode\u003ee2375ab\u003c/code\u003e\u003c/a\u003e Test \u003ccode\u003ecreate_junction\u003c/code\u003e changes from \u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19402\"\u003e#19402\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19487\"\u003e#19487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/547bf2f9e7f4ff8b3e8a974e0cad3159ac04bb8c\"\u003e\u003ccode\u003e547bf2f\u003c/code\u003e\u003c/a\u003e Avoid unwrapping from \u003ccode\u003eOnceMap\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19510\"\u003e#19510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/uv/compare/0.11.15...0.11.16\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pytest-codspeed` from 5.0.2 to 5.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/CodSpeedHQ/pytest-codspeed/releases\"\u003epytest-codspeed's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003echore: move callgrind skip obj API to instrument-hooks by \u003ca href=\"https://github.com/not-matthias\"\u003e\u003ccode\u003e@​not-matthias\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CodSpeedHQ/pytest-codspeed/pull/123\"\u003eCodSpeedHQ/pytest-codspeed#123\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/CodSpeedHQ/pytest-codspeed/compare/v5.0.2...v5.0.3\"\u003ehttps://github.com/CodSpeedHQ/pytest-codspeed/compare/v5.0.2...v5.0.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/CodSpeedHQ/pytest-codspeed/blob/master/CHANGELOG.md\"\u003epytest-codspeed's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[5.0.3] - 2026-05-22\u003c/h2\u003e\n\u003ch3\u003e\u003c!-- raw HTML omitted --\u003e🏗️ Refactor\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUse instrument_hooks_callgrind_add_obj_skip from C API by \u003ca href=\"https://github.com/not-matthias\"\u003e\u003ccode\u003e@​not-matthias\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/CodSpeedHQ/pytest-codspeed/pull/123\"\u003e#123\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/CodSpeedHQ/pytest-codspeed/commit/b2d12d8e96704c82b449d8668818a754ede45c66\"\u003e\u003ccode\u003eb2d12d8\u003c/code\u003e\u003c/a\u003e Release v5.0.3 🚀\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/CodSpeedHQ/pytest-codspeed/commit/31447b7b6fba4ff9a5bdf5c0d046b7d8936cab5c\"\u003e\u003ccode\u003e31447b7\u003c/code\u003e\u003c/a\u003e refactor: use instrument_hooks_callgrind_add_obj_skip from C API\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/CodSpeedHQ/pytest-codspeed/compare/v5.0.2...v5.0.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/Beaconchain-us/prefect/pull/11","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/Beaconchain-us%2Fprefect/issues/11","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/11/packages"}},{"old_version":"7.1.1","new_version":"7.1.4","update_type":"patch","path":null,"pr_created_at":"2026-05-23T02:25:59.000Z","version_change":"7.1.1 → 7.1.4","issue":{"uuid":"4506548171","node_id":"PR_kwDOGuafp87eipch","number":23,"state":"closed","title":"build(deps-dev): bump the python-deps group across 1 directory with 15 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-30T02:25:04.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-23T02:25:59.000Z","updated_at":"2026-05-30T02:25:06.000Z","time_to_close":604745,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"build(deps-dev): bump","group_name":"python-deps","update_count":15,"packages":[{"name":"tox","old_version":"4.53.1","new_version":"4.54.0","repository_url":"https://github.com/tox-dev/tox"},{"name":"cachetools","old_version":"7.1.1","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.4.22","new_version":"2026.5.20","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.3.3","new_version":"8.4.1","repository_url":"https://github.com/pallets/click"},{"name":"coverage","old_version":"7.13.5","new_version":"7.14.0","repository_url":"https://github.com/coveragepy/coveragepy"},{"name":"django-stubs","old_version":"6.0.3","new_version":"6.0.4","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"django-stubs-ext","old_version":"6.0.3","new_version":"6.0.4","repository_url":"https://github.com/typeddjango/django-stubs"},{"name":"idna","old_version":"3.13","new_version":"3.16","repository_url":"https://github.com/kjd/idna"},{"name":"librt","old_version":"0.10.0","new_version":"0.11.0","repository_url":"https://github.com/mypyc/librt"},{"name":"mypy","old_version":"2.0.0","new_version":"2.1.0","repository_url":"https://github.com/python/mypy"},{"name":"pydantic-core","old_version":"2.46.4","new_version":"2.47.0","repository_url":"https://github.com/pydantic/pydantic"},{"name":"python-discovery","old_version":"1.3.0","new_version":"1.3.1","repository_url":"https://github.com/tox-dev/python-discovery"},{"name":"tomlkit","old_version":"0.14.0","new_version":"0.15.0","repository_url":"https://github.com/python-poetry/tomlkit"},{"name":"uv","old_version":"0.11.12","new_version":"0.11.16","repository_url":"https://github.com/astral-sh/uv"},{"name":"virtualenv","old_version":"21.3.1","new_version":"21.3.3","repository_url":"https://github.com/pypa/virtualenv"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-deps group with 15 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [tox](https://github.com/tox-dev/tox) | `4.53.1` | `4.54.0` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.1.1` | `7.1.4` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.4.22` | `2026.5.20` |\n| [click](https://github.com/pallets/click) | `8.3.3` | `8.4.1` |\n| [coverage](https://github.com/coveragepy/coveragepy) | `7.13.5` | `7.14.0` |\n| [django-stubs](https://github.com/typeddjango/django-stubs) | `6.0.3` | `6.0.4` |\n| [django-stubs-ext](https://github.com/typeddjango/django-stubs) | `6.0.3` | `6.0.4` |\n| [idna](https://github.com/kjd/idna) | `3.13` | `3.16` |\n| [librt](https://github.com/mypyc/librt) | `0.10.0` | `0.11.0` |\n| [mypy](https://github.com/python/mypy) | `2.0.0` | `2.1.0` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.4` | `2.47.0` |\n| [python-discovery](https://github.com/tox-dev/python-discovery) | `1.3.0` | `1.3.1` |\n| [tomlkit](https://github.com/python-poetry/tomlkit) | `0.14.0` | `0.15.0` |\n| [uv](https://github.com/astral-sh/uv) | `0.11.12` | `0.11.16` |\n| [virtualenv](https://github.com/pypa/virtualenv) | `21.3.1` | `21.3.3` |\n\n\nUpdates `tox` from 4.53.1 to 4.54.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/tox/releases\"\u003etox's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.54.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e🧪 test(conftest): strip broken nspkg.pth files under py3.15 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/tox/pull/3937\"\u003etox-dev/tox#3937\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e✨ feat(packaging): declare tox.pytest deps via a testing extra 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/tox/pull/3940\"\u003etox-dev/tox#3940\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(schema): cover every replace form in the TOML schema 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/tox/pull/3941\"\u003etox-dev/tox#3941\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/tox/compare/4.53.1...4.54.0\"\u003ehttps://github.com/tox-dev/tox/compare/4.53.1...4.54.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/tox/blob/main/docs/changelog.rst\"\u003etox's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eFeatures - 4.54.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eDeclare the runtime dependencies of the \u003ccode\u003etox.pytest\u003c/code\u003e plugin (\u003ccode\u003epytest\u003c/code\u003e, \u003ccode\u003edevpi-process\u003c/code\u003e and \u003ccode\u003epytest-mock\u003c/code\u003e)\nunder a new \u003ccode\u003etesting\u003c/code\u003e extra, so plugin authors can pull them in via \u003ccode\u003etox[testing]\u003c/code\u003e - by :user:\u003ccode\u003egaborbernat\u003c/code\u003e.\n(:issue:\u003ccode\u003e3938\u003c/code\u003e, :issue:\u003ccode\u003e3940\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eBug fixes - 4.54.0\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eExtend the generated TOML schema to cover every \u003ccode\u003ereplace\u003c/code\u003e table form (\u003ccode\u003eenv\u003c/code\u003e, \u003ccode\u003eref\u003c/code\u003e, \u003ccode\u003eposargs\u003c/code\u003e, \u003ccode\u003eglob\u003c/code\u003e,\n\u003ccode\u003eif\u003c/code\u003e), including conditional replacements used inside \u003ccode\u003ecommands\u003c/code\u003e. A guard test asserts the schema stays in sync\nwith the loader implementation so future replace types cannot be added without a corresponding schema entry.\n(:issue:\u003ccode\u003e3939\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev4.53.1 (2026-05-02)\u003c/p\u003e\n\u003chr /\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/1f1fcc7a53665a827d8a304190696c6926ebb2eb\"\u003e\u003ccode\u003e1f1fcc7\u003c/code\u003e\u003c/a\u003e release 4.54.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/b35c8eedaf94906ed0e7938c7526dced550e6fa0\"\u003e\u003ccode\u003eb35c8ee\u003c/code\u003e\u003c/a\u003e 🐛 fix(schema): cover every replace form in the TOML schema (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3941\"\u003e#3941\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/6eb5c4f5eec439b3924d6adb3d9d16ea7fc88a20\"\u003e\u003ccode\u003e6eb5c4f\u003c/code\u003e\u003c/a\u003e ✨ feat(packaging): declare tox.pytest deps via a testing extra (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3940\"\u003e#3940\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/1ad47ddaab21c891f136a9627d1c6cdb6ea655d7\"\u003e\u003ccode\u003e1ad47dd\u003c/code\u003e\u003c/a\u003e 🧪 test(conftest): strip broken nspkg.pth files under py3.15 (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3937\"\u003e#3937\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/dfba9661b10aa5148daf7267b80fec50f4faa9d2\"\u003e\u003ccode\u003edfba966\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3936\"\u003e#3936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/tox/commit/21069af5f5b93774f88c271d5deb1389cd2caf12\"\u003e\u003ccode\u003e21069af\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/tox/issues/3933\"\u003e#3933\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/tox/compare/4.53.1...4.54.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.1.1 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\u003c/blockquote\u003e\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.1.1...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.4.22 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\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.04.22...2026.05.20\"\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.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.rst\"\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 :issue:\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\u003eChoice\u003c/code\u003e \u003ccode\u003eEnum\u003c/code\u003e values produces a valid completion\nresult. :issue:\u003ccode\u003e3015\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix empty byte-string handling in echo. :issue:\u003ccode\u003e3487\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\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\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\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.3.3...8.4.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `coverage` from 7.13.5 to 7.14.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst\"\u003ecoverage's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 7.14.0 — 2026-05-10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFeature: now when running one of the reporting commands, if there are\nparallel data files that need combining, they will be implicitly combined\nbefore creating the report. There is no option to avoid the combination; let\nus know if you have a use case that requires it.  Thanks, \u003ccode\u003eTim Hatch \u0026lt;pull 2162_\u0026gt;\u003c/code\u003e\u003cem\u003e. Closes \u003ccode\u003eissue 1781\u003c/code\u003e\u003c/em\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the output from \u003ccode\u003ecombine\u003c/code\u003e was too verbose, listing each file\nconsidered. Now it shows a single line with the counts of files combined,\nfiles skipped, and files with errors. The \u003ccode\u003e-q\u003c/code\u003e flag suppresses this line.\nThe old detailed lines are available with the new \u003ccode\u003e--debug=combine\u003c/code\u003e option.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: running a Python file through a symlink now sets the sys.path correctly,\nmatching regular Python behavior. Fixes \u003ccode\u003eissue 2157\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: \u003ccode\u003eCollector.flush_data\u003c/code\u003e could fail with \u0026quot;RuntimeError: Set changed\nsize during iteration\u0026quot; when a tracer in another thread added a line to the\nper-file set that \u003ccode\u003eadd_lines\u003c/code\u003e (or \u003ccode\u003eadd_arcs\u003c/code\u003e) was iterating. The values\npassed to \u003ccode\u003eCoverageData\u003c/code\u003e are now snapshotted via \u003ccode\u003edict.copy()\u003c/code\u003e and\n\u003ccode\u003eset.copy()\u003c/code\u003e, which are atomic under the GIL. Thanks, \u003ccode\u003eAlex Vandiver \u0026lt;pull 2165_\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix: the soft keyword \u003ccode\u003elazy\u003c/code\u003e is now bolded in HTML reports.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWe are no longer testing eventlet support. Eventlet started issuing stern\ndeprecation warnings that break our tests. Our support code is still there.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e.. _issue 1781: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/1781\"\u003ecoveragepy/coveragepy#1781\u003c/a\u003e\n.. _issue 2157: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2157\"\u003ecoveragepy/coveragepy#2157\u003c/a\u003e\n.. _pull 2162: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2162\"\u003ecoveragepy/coveragepy#2162\u003c/a\u003e\n.. _pull 2165: \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/pull/2165\"\u003ecoveragepy/coveragepy#2165\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e.. _changes_7-13-5:\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/646351b60429f1b5760af6c1b97b28483244a955\"\u003e\u003ccode\u003e646351b\u003c/code\u003e\u003c/a\u003e docs: sample HTML for 7.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/39cd015505c8b04369c5b06e34fc22449a697370\"\u003e\u003ccode\u003e39cd015\u003c/code\u003e\u003c/a\u003e docs: prep for 7.14.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/649e8aa34af7d80c386ae82e8a3a6c9a3acb0dab\"\u003e\u003ccode\u003e649e8aa\u003c/code\u003e\u003c/a\u003e docs: thanks Alex Vandiver for \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2165\"\u003e#2165\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/8cd392e3b5c4bc15d534aaec0c21714f9f518469\"\u003e\u003ccode\u003e8cd392e\u003c/code\u003e\u003c/a\u003e fix: snapshot data in Collector.flush_data to avoid threading race (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2165\"\u003e#2165\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c48e0edc2ebe44621b0053176e90f77b0c79bec1\"\u003e\u003ccode\u003ec48e0ed\u003c/code\u003e\u003c/a\u003e fix: less output for combining\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/c2a3a284078556c911e0d9b6c6af1b7082a363ea\"\u003e\u003ccode\u003ec2a3a28\u003c/code\u003e\u003c/a\u003e docs: explain the change from \u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2162\"\u003e#2162\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/1cd47aa6ac1da4e150da44055295d4e4f3a014e8\"\u003e\u003ccode\u003e1cd47aa\u003c/code\u003e\u003c/a\u003e fix: implicit combine-during-report now removes the combined data files\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/2d99fd7696e0bccec8037479a4e45c1ecccb8058\"\u003e\u003ccode\u003e2d99fd7\u003c/code\u003e\u003c/a\u003e feat: automatically combine coverage in report, thanks Tim Hatch (\u003ca href=\"https://redirect.github.com/coveragepy/coveragepy/issues/2162\"\u003e#2162\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/9fbdcdfee1c122fac43f1bf9a5e2d1f4d835f21c\"\u003e\u003ccode\u003e9fbdcdf\u003c/code\u003e\u003c/a\u003e fix: lazy soft keywords are bolded\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/coveragepy/coveragepy/commit/5de7d0267b9466d59995aaae1a7e707c8c6f66e7\"\u003e\u003ccode\u003e5de7d02\u003c/code\u003e\u003c/a\u003e build: oops, misplaced quote\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/coveragepy/coveragepy/compare/7.13.5...7.14.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs` from 6.0.3 to 6.0.4\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/928eec423b8454590a46e50653698d85954f04de\"\u003e\u003ccode\u003e928eec4\u003c/code\u003e\u003c/a\u003e Version 6.0.4 release (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3375\"\u003e#3375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/a9942040a2ed28b8e1ae129578c1f5a4f2b449b8\"\u003e\u003ccode\u003ea994204\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v2 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3374\"\u003e#3374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ec8107b44d798a16b42ff049fe3904c9a4b5df08\"\u003e\u003ccode\u003eec8107b\u003c/code\u003e\u003c/a\u003e Update dependency pyrefly to v0.64.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/28d997bc1e6559579ce3f4663178a8294e402897\"\u003e\u003ccode\u003e28d997b\u003c/code\u003e\u003c/a\u003e Remove unused get_field_lookup_exact_type from helpers (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3372\"\u003e#3372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/d312d60b1d7e852f73babe2a76be1d2961b94393\"\u003e\u003ccode\u003ed312d60\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.14 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3371\"\u003e#3371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/f20e49018f19e84a839ab5d11ac47654e671728a\"\u003e\u003ccode\u003ef20e490\u003c/code\u003e\u003c/a\u003e Update Django to 6.0.5 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3369\"\u003e#3369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/6d9d0e26fff5462782bfeede76ffd8b2cc36712d\"\u003e\u003ccode\u003e6d9d0e2\u003c/code\u003e\u003c/a\u003e Resolve default_alias for positional Aggregate in annotate() (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3362\"\u003e#3362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/6dd9231e36393d5ddaecb5d0ffca2a6b824bf0cc\"\u003e\u003ccode\u003e6dd9231\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.58.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3368\"\u003e#3368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e270482574c273798d875f2191945f64dbb0c00a\"\u003e\u003ccode\u003ee270482\u003c/code\u003e\u003c/a\u003e Update dependency psycopg to v3.3.4 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3365\"\u003e#3365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/cfb0f9a098e24d47f1c3cc5c5de971b599c6e907\"\u003e\u003ccode\u003ecfb0f9a\u003c/code\u003e\u003c/a\u003e Update dependency pyrefly to v0.63.1 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3367\"\u003e#3367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.3...6.0.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `django-stubs-ext` from 6.0.3 to 6.0.4\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/928eec423b8454590a46e50653698d85954f04de\"\u003e\u003ccode\u003e928eec4\u003c/code\u003e\u003c/a\u003e Version 6.0.4 release (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3375\"\u003e#3375\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/a9942040a2ed28b8e1ae129578c1f5a4f2b449b8\"\u003e\u003ccode\u003ea994204\u003c/code\u003e\u003c/a\u003e Update dependency mypy to v2 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3374\"\u003e#3374\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/ec8107b44d798a16b42ff049fe3904c9a4b5df08\"\u003e\u003ccode\u003eec8107b\u003c/code\u003e\u003c/a\u003e Update dependency pyrefly to v0.64.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3373\"\u003e#3373\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/28d997bc1e6559579ce3f4663178a8294e402897\"\u003e\u003ccode\u003e28d997b\u003c/code\u003e\u003c/a\u003e Remove unused get_field_lookup_exact_type from helpers (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3372\"\u003e#3372\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/d312d60b1d7e852f73babe2a76be1d2961b94393\"\u003e\u003ccode\u003ed312d60\u003c/code\u003e\u003c/a\u003e Update dependency django to v5.2.14 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3371\"\u003e#3371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/f20e49018f19e84a839ab5d11ac47654e671728a\"\u003e\u003ccode\u003ef20e490\u003c/code\u003e\u003c/a\u003e Update Django to 6.0.5 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3369\"\u003e#3369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/6d9d0e26fff5462782bfeede76ffd8b2cc36712d\"\u003e\u003ccode\u003e6d9d0e2\u003c/code\u003e\u003c/a\u003e Resolve default_alias for positional Aggregate in annotate() (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3362\"\u003e#3362\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/6dd9231e36393d5ddaecb5d0ffca2a6b824bf0cc\"\u003e\u003ccode\u003e6dd9231\u003c/code\u003e\u003c/a\u003e Update int128/hide-comment-action action to v1.58.0 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3368\"\u003e#3368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/e270482574c273798d875f2191945f64dbb0c00a\"\u003e\u003ccode\u003ee270482\u003c/code\u003e\u003c/a\u003e Update dependency psycopg to v3.3.4 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3365\"\u003e#3365\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/typeddjango/django-stubs/commit/cfb0f9a098e24d47f1c3cc5c5de971b599c6e907\"\u003e\u003ccode\u003ecfb0f9a\u003c/code\u003e\u003c/a\u003e Update dependency pyrefly to v0.63.1 (\u003ca href=\"https://redirect.github.com/typeddjango/django-stubs/issues/3367\"\u003e#3367\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/typeddjango/django-stubs/compare/6.0.3...6.0.4\"\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.16\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.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\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003c/blockquote\u003e\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/6d1a0de52a8b4690f1b2a89829aa85ff1de3635a\"\u003e\u003ccode\u003e6d1a0de\u003c/code\u003e\u003c/a\u003e Release 3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/4e6cbe225a3e0b6e7eed2082086a12cba526e787\"\u003e\u003ccode\u003e4e6cbe2\u003c/code\u003e\u003c/a\u003e Demote installation instruction to usage section\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/223533c34c9e23470e714ed9b1f1c41867177732\"\u003e\u003ccode\u003e223533c\u003c/code\u003e\u003c/a\u003e Merge branch 'readme-simplification' into release-3.16\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b1640b228a50b3c94ffcf8a664eb6cb186550f3e\"\u003e\u003ccode\u003eb1640b2\u003c/code\u003e\u003c/a\u003e Bump version to 3.16rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/3a861132be61091454aae10c292d98bcfd3cd797\"\u003e\u003ccode\u003e3a86113\u003c/code\u003e\u003c/a\u003e Update history for 3.16 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/d4bc9e742b753cff2ec6c53bd4be730863ca9c53\"\u003e\u003ccode\u003ed4bc9e7\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/246\"\u003e#246\u003c/a\u003e from kjd/python-3.9\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/a21d9fca6b04c47ddbd0303d62bbc0712b55f43d\"\u003e\u003ccode\u003ea21d9fc\u003c/code\u003e\u003c/a\u003e Update deprecation policy\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/b46492694aa21dc1c3608f59dd5b9620c08b2d0f\"\u003e\u003ccode\u003eb464926\u003c/code\u003e\u003c/a\u003e Raise minimum Python to 3.9 and modernize typing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7f3b15e8839f0e404a00054c4072e69347e727f2\"\u003e\u003ccode\u003e7f3b15e\u003c/code\u003e\u003c/a\u003e Explicit example not needed\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/7530c7020ae2bcf0acff1fafd71fb047a3b117ed\"\u003e\u003ccode\u003e7530c70\u003c/code\u003e\u003c/a\u003e Remove unnecessary print()\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.13...v3.16\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `librt` from 0.10.0 to 0.11.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mypyc/librt/commit/862679a0492f4433a286b2d53965ec2603623be1\"\u003e\u003ccode\u003e862679a\u003c/code\u003e\u003c/a\u003e Sync mypy and bump version to 0.11.0 (\u003ca href=\"https://redirect.github.com/mypyc/librt/issues/40\"\u003e#40\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/mypyc/librt/compare/v0.10.0...v0.11.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `mypy` from 2.0.0 to 2.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python/mypy/blob/master/CHANGELOG.md\"\u003emypy's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eMypy Release Notes\u003c/h1\u003e\n\u003ch2\u003eNext Release\u003c/h2\u003e\n\u003ch2\u003eMypy 2.1\u003c/h2\u003e\n\u003cp\u003eWe’ve just uploaded mypy 2.1.0 to the Python Package Index (\u003ca href=\"https://pypi.org/project/mypy/\"\u003ePyPI\u003c/a\u003e).\nMypy is a static type checker for Python. This release includes new features, performance\nimprovements and bug fixes. You can install it as follows:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 -m pip install -U mypy\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can read the full documentation for this release on \u003ca href=\"http://mypy.readthedocs.io\"\u003eRead the Docs\u003c/a\u003e.\u003c/p\u003e\n\u003ch3\u003elibrt.vecs: Fast Growable Array Type for Mypyc\u003c/h3\u003e\n\u003cp\u003eThe new \u003ccode\u003elibrt.vecs\u003c/code\u003e module provides an efficient growable array type \u003ccode\u003evec\u003c/code\u003e that is\noptimized for mypyc use. It provides fast, packed arrays with integer and floating point\nvalue types, which can be \u003cstrong\u003eseveral times faster\u003c/strong\u003e than \u003ccode\u003elist\u003c/code\u003e, and tens of times faster\nthan \u003ccode\u003earray.array\u003c/code\u003e in code compiled using mypyc. It also supports nested \u003ccode\u003evec\u003c/code\u003e objects and\nnon-value-type items, such as \u003ccode\u003evec[vec[str]]\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eRefer to the \u003ca href=\"https://mypyc.readthedocs.io/en/latest/librt_vecs.html\"\u003edocumentation\u003c/a\u003e for\nthe details.\u003c/p\u003e\n\u003cp\u003eContributed by Jukka Lehtosalo.\u003c/p\u003e\n\u003ch3\u003elibrt.random: Fast Pseudo-Random Number Generation\u003c/h3\u003e\n\u003cp\u003eThe new \u003ccode\u003elibrt.random\u003c/code\u003e module provides fast pseudo-random number generation that is\noptimized for code compiled using mypyc. It can be 3x to 10x faster than the stdlib\n\u003ccode\u003erandom\u003c/code\u003e module in compiled code.\u003c/p\u003e\n\u003cp\u003eRefer to the \u003ca href=\"https://mypyc.readthedocs.io/en/latest/librt_random.html\"\u003edocumentation\u003c/a\u003e for\nthe details.\u003c/p\u003e\n\u003cp\u003eContributed by Jukka Lehtosalo (PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21433\"\u003e21433\u003c/a\u003e).\u003c/p\u003e\n\u003ch3\u003eMypyc Improvements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMake compilation order with multiple files consistent (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21419\"\u003e21419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix crash on accessing \u003ccode\u003eStopAsyncIteration\u003c/code\u003e (Piotr Sawicki, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21406\"\u003e21406\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix incremental compilation with \u003ccode\u003eseparate\u003c/code\u003e flag (Vaggelis Danias, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21299\"\u003e21299\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixes to Crashes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix crash on partial type with \u003ccode\u003e--allow-redefinition\u003c/code\u003e and \u003ccode\u003eglobal\u003c/code\u003e declaration (Jukka Lehtosalo, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21428\"\u003e21428\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix broken awaitable generator patching (Ivan Levkivskyi, PR \u003ca href=\"https://redirect.github.com/python/mypy/pull/21435\"\u003e21435\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanges to Messages\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/python/mypy/commit/c1c336d7e34eb313080c79b156518c58d27c7234\"\u003e\u003ccode\u003ec1c336d\u003c/code\u003e\u003c/a\u003e Remove +dev from version\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/74df14b7cbf08140236aa45bbb7f42219b0b1df7\"\u003e\u003ccode\u003e74df14b\u003c/code\u003e\u003c/a\u003e Add changelog for mypy 2.1 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21464\"\u003e#21464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/022d9bc96f86c40f338a5cf150f1806cc8f300ff\"\u003e\u003ccode\u003e022d9bc\u003c/code\u003e\u003c/a\u003e Revert \u0026quot;TypeForm: Enable by default (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21262\"\u003e#21262\u003c/a\u003e)\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8826288214f1cb31496e610667481221e025359c\"\u003e\u003ccode\u003e8826288\u003c/code\u003e\u003c/a\u003e [mypyc] Document librt.random (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21463\"\u003e#21463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/3f4067b699dbe52d08e42ef3b3ebfdebdc06bd96\"\u003e\u003ccode\u003e3f4067b\u003c/code\u003e\u003c/a\u003e Bump librt version to 0.11.0 (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21458\"\u003e#21458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/2b1eb58a250c5f1eb4ef5fb1f312ff528c5a1d4e\"\u003e\u003ccode\u003e2b1eb58\u003c/code\u003e\u003c/a\u003e [mypyc] Enable incremental self-compilation (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21369\"\u003e#21369\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/8152f4af3f6c03beaf2660026240f0fdce7feecc\"\u003e\u003ccode\u003e8152f4a\u003c/code\u003e\u003c/a\u003e Respect file config comments for stale modules (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21444\"\u003e#21444\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/116d60bdd3fdfe8d97c6afe99370910db56f1b92\"\u003e\u003ccode\u003e116d60b\u003c/code\u003e\u003c/a\u003e Fix nondeterminism from nonassociativity of overload joins (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21455\"\u003e#21455\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/6c4af8e42110cea3f84bc02add2ca7b89c268210\"\u003e\u003ccode\u003e6c4af8e\u003c/code\u003e\u003c/a\u003e Fix function call message change for small number of args (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21432\"\u003e#21432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python/mypy/commit/4b8fdcaf24032592510e8f15421fb32d82a71800\"\u003e\u003ccode\u003e4b8fdca\u003c/code\u003e\u003c/a\u003e [mypyc] Add librt.random module (\u003ca href=\"https://redirect.github.com/python/mypy/issues/21433\"\u003e#21433\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python/mypy/compare/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 `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\nUpdates `python-discovery` from 1.3.0 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/tox-dev/python-discovery/releases\"\u003epython-discovery's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.1\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCanonicalize GraalPy implementation name. by \u003ca href=\"https://github.com/timfel\"\u003e\u003ccode\u003e@​timfel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/pull/73\"\u003etox-dev/python-discovery#73\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e👷 ci(release): wire up towncrier-driven release pipeline 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/python-discovery/pull/74\"\u003etox-dev/python-discovery#74\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/timfel\"\u003e\u003ccode\u003e@​timfel\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/pull/73\"\u003etox-dev/python-discovery#73\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/python-discovery/compare/1.3.0...1.3.1\"\u003ehttps://github.com/tox-dev/python-discovery/compare/1.3.0...1.3.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/tox-dev/python-discovery/blob/main/docs/changelog.rst\"\u003epython-discovery's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eBug fixes - 1.3.1\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eexport normalize_isa and deprecate KNOWN_ARCHITECTURES - by :user:\u003ccode\u003erahuldevikar\u003c/code\u003e. (:issue:\u003ccode\u003e59\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003ediscover uv-managed Pythons on Windows. Previously the glob assumed Unix layout (\u003ccode\u003e\u0026lt;root\u0026gt;/\u0026lt;key\u0026gt;/bin/python\u003c/code\u003e) and\nsilently found nothing on Windows, where uv places \u003ccode\u003epython.exe\u003c/code\u003e directly under the install root - by\n:user:\u003ccode\u003egaborbernat\u003c/code\u003e. (:issue:\u003ccode\u003e65\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eCanonicalize GraalVM to match GraalPy Python interpreter in PythonSpec and PythonInfo. - by :user:\u003ccode\u003etimfel\u003c/code\u003e. (:issue:\u003ccode\u003e73\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev1.3.0 (2026-05-05)\u003c/p\u003e\n\u003chr /\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/python-discovery/commit/0d344843eae2e74c13eb739f2c043e177aa015b0\"\u003e\u003ccode\u003e0d34484\u003c/code\u003e\u003c/a\u003e release 1.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/python-discovery/commit/6840c417a47eea7c7ae0347838a63f89c1d24749\"\u003e\u003ccode\u003e6840c41\u003c/code\u003e\u003c/a\u003e 👷 ci(release): wire up towncrier-driven release pipeline (\u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/issues/74\"\u003e#74\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/python-discovery/commit/68f7dc15f51a4bdec413080077816b9e895b23cd\"\u003e\u003ccode\u003e68f7dc1\u003c/code\u003e\u003c/a\u003e Canonicalize GraalPy implementation name. (\u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/issues/73\"\u003e#73\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tox-dev/python-discovery/commit/e7cff49eb8610590395e495f875e5d1e8771e24d\"\u003e\u003ccode\u003ee7cff49\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/tox-dev/python-discovery/issues/72\"\u003e#72\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/tox-dev/python-discovery/compare/1.3.0...1.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `tomlkit` from 0.14.0 to 0.15.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-poetry/tomlkit/releases\"\u003etomlkit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.15.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat(spec): update to toml spec v1.1 by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/456\"\u003epython-poetry/tomlkit#456\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/455\"\u003epython-poetry/tomlkit#455\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump virtualenv from 20.26.6 to 20.36.1 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/python-poetry/tomlkit/pull/454\"\u003epython-poetry/tomlkit#454\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/458\"\u003epython-poetry/tomlkit#458\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump pygments from 2.18.0 to 2.20.0 in /docs 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/python-poetry/tomlkit/pull/464\"\u003epython-poetry/tomlkit#464\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps-dev): bump pygments from 2.17.2 to 2.20.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/python-poetry/tomlkit/pull/463\"\u003epython-poetry/tomlkit#463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore(deps): bump requests from 2.32.4 to 2.33.0 in /docs 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/python-poetry/tomlkit/pull/462\"\u003epython-poetry/tomlkit#462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/461\"\u003epython-poetry/tomlkit#461\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType annotations by \u003ca href=\"https://github.com/dimbleby\"\u003e\u003ccode\u003e@​dimbleby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/460\"\u003epython-poetry/tomlkit#460\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHonor sort_keys for parsed TOML documents by \u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/471\"\u003epython-poetry/tomlkit#471\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/469\"\u003epython-poetry/tomlkit#469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: fix a parser hang by \u003ca href=\"https://github.com/dimbleby\"\u003e\u003ccode\u003e@​dimbleby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/470\"\u003epython-poetry/tomlkit#470\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[pre-commit.ci] pre-commit autoupdate by \u003ca href=\"https://github.com/pre-commit-ci\"\u003e\u003ccode\u003e@​pre-commit-ci\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/472\"\u003epython-poetry/tomlkit#472\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump version to 0.15.0 and update changelog for release by \u003ca href=\"https://github.com/frostming\"\u003e\u003ccode\u003e@​frostming\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/473\"\u003epython-poetry/tomlkit#473\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/dimbleby\"\u003e\u003ccode\u003e@​dimbleby\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/460\"\u003epython-poetry/tomlkit#460\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ShipItAndPray\"\u003e\u003ccode\u003e@​ShipItAndPray\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/471\"\u003epython-poetry/tomlkit#471\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/python-poetry/tomlkit/compare/0.14.0...0.15.0\"\u003ehttps://github.com/python-poetry/tomlkit/compare/0.14.0...0.15.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/python-poetry/tomlkit/blob/master/CHANGELOG.md\"\u003etomlkit's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[0.15.0] - 2026-05-10\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate parser to support TOML spec v1.1.0. (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/pull/456\"\u003e#456\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-poetry/tomlkit/commit/8694e4d3323df68eb325bf3d5ab7caa66f8c206a\"\u003e\u003ccode\u003e8694e4d\u003c/code\u003e\u003c/a\u003e chore: bump version to 0.15.0 and update changelog for release (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/473\"\u003e#473\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/e636a5121260e811dba9fd1c33656021f6855490\"\u003e\u003ccode\u003ee636a51\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/472\"\u003e#472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/96a4d22fdd07e25742009a6bcd8a2d23e9b5574a\"\u003e\u003ccode\u003e96a4d22\u003c/code\u003e\u003c/a\u003e fix: fix a parser hang (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/470\"\u003e#470\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/843f79992139ec56266f52161b27a3eadd1f6a35\"\u003e\u003ccode\u003e843f799\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/469\"\u003e#469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/2c87eafe7c852d19c1b91a1c9bed4d47bd03816f\"\u003e\u003ccode\u003e2c87eaf\u003c/code\u003e\u003c/a\u003e Honor sort_keys for parsed TOML documents (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/471\"\u003e#471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/8e32f9cb7fcfbc45e893c34e0e9a590a26675fd6\"\u003e\u003ccode\u003e8e32f9c\u003c/code\u003e\u003c/a\u003e Type annotations (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/460\"\u003e#460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/df98af48778f865d270d2f53e816d3b0948c8927\"\u003e\u003ccode\u003edf98af4\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/461\"\u003e#461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/4bd97db2c8fda5cbffc01acc586e3328168bac36\"\u003e\u003ccode\u003e4bd97db\u003c/code\u003e\u003c/a\u003e chore(deps): bump requests from 2.32.4 to 2.33.0 in /docs (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/462\"\u003e#462\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/b2d703032bf2e44e680b67f2897c3a7c67be55eb\"\u003e\u003ccode\u003eb2d7030\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pygments from 2.17.2 to 2.20.0 (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/463\"\u003e#463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-poetry/tomlkit/commit/87d98b1d0100c5bd39736eda4cd9cc3d8e24bf48\"\u003e\u003ccode\u003e87d98b1\u003c/code\u003e\u003c/a\u003e chore(deps): bump pygments from 2.18.0 to 2.20.0 in /docs (\u003ca href=\"https://redirect.github.com/python-poetry/tomlkit/issues/464\"\u003e#464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-poetry/tomlkit/compare/0.14.0...0.15.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `uv` from 0.11.12 to 0.11.16\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/releases\"\u003euv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003ch2\u003eRelease Notes\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow disabling reading the system config with \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19476\"\u003e#19476\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure that incompatible wheel hints do not leak secrets (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19504\"\u003e#19504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unsafe entry points in \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19495\"\u003e#19495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict delimiters in entry point parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19471\"\u003e#19471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euv-netrc: fix multi-word no-space comment lines causing parse errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19494\"\u003e#19494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument and test relative exclude-newer support for uv pip (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19475\"\u003e#19475\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eInstall uv 0.11.16\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/uv/releases/download/0.11.16/uv-installer.sh | sh\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3\u003eInstall prebuilt binaries via powershell script\u003c/h3\u003e\n\u003cpre lang=\"sh\"\u003e\u003ccode\u003epowershell -ExecutionPolicy Bypass -c \u0026quot;irm https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-installer.ps1 | iex\u0026quot;\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2\u003eDownload uv 0.11.16\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFile\u003c/th\u003e\n\u003cth\u003ePlatform\u003c/th\u003e\n\u003cth\u003eChecksum\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-aarch64-apple-darwin.tar.gz\"\u003euv-aarch64-apple-darwin.tar.gz\u003c/a\u003e\u003c/td\u003e\n\u003ctd\u003eApple Silicon macOS\u003c/td\u003e\n\u003ctd\u003e\u003ca href=\"https://releases.astral.sh/github/uv/releases/download/0.11.16/uv-aarch64-apple-darwin.tar.gz.sha256\"\u003echecksum\u003c/a\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/astral-sh/uv/blob/main/CHANGELOG.md\"\u003euv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.11.16\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-21.\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdjust hint rendering (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18090\"\u003e#18090\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview features\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eConfiguration\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow disabling reading the system config with \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19476\"\u003e#19476\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnsure that incompatible wheel hints do not leak secrets (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19504\"\u003e#19504\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject unsafe entry points in \u003ccode\u003euv-build\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19495\"\u003e#19495\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRestrict delimiters in entry point parsing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19471\"\u003e#19471\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003euv-netrc: fix multi-word no-space comment lines causing parse errors (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19494\"\u003e#19494\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDocument and test relative exclude-newer support for uv pip (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19475\"\u003e#19475\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e0.11.15\u003c/h2\u003e\n\u003cp\u003eReleased on 2026-05-18.\u003c/p\u003e\n\u003ch3\u003eSecurity\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix a TAR parser differential, see \u003ca href=\"https://github.com/astral-sh/tokio-tar/security/advisories/GHSA-3cv2-h65g-fgmm\"\u003eGHSA-3cv2-h65g-fgmm\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19463\"\u003e#19463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eEnforce that entry points cannot escape in the scripts directory, see \u003ca href=\"https://github.com/astral-sh/uv/security/advisories/GHSA-4gg8-gxpx-9rph\"\u003eGHSA-4gg8-gxpx-9rph\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19464\"\u003e#19464\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd TOML v1.1 -\u0026gt; v1.0 backwards compatibility for source distributions (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/18741\"\u003e#18741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd support for Azure request signing (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19421\"\u003e#19421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eApply stricter validation to all wheel filename segments (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19364\"\u003e#19364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReject empty strings as an invalid package name (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19435\"\u003e#19435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse structured errors for signing authentication failures (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19422\"\u003e#19422\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003ePreview\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003euv audit: Add JSON output (\u003ca href=\"https://redirect.github.com/astral-sh/uv/pull/19305\"\u003e#19305\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/uv/commit/135a3636789bb6886e0a7876f58cb4dbb270ba6d\"\u003e\u003ccode\u003e135a363\u003c/code\u003e\u003c/a\u003e Bump version to 0.11.16 (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19522\"\u003e#19522\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/3b5f99412c7050f1050c09d2b7a48f82c333adfa\"\u003e\u003ccode\u003e3b5f994\u003c/code\u003e\u003c/a\u003e Add a \u003ccode\u003euv lock\u003c/code\u003e check to CI (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19524\"\u003e#19524\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4ffb506acf2b3d4dfd9a343a3cee53abe63a4de7\"\u003e\u003ccode\u003e4ffb506\u003c/code\u003e\u003c/a\u003e Improve crates.io new crate error message (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19523\"\u003e#19523\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/51ba989e678ba1558ed48e1ea3e66d01a6dc30b3\"\u003e\u003ccode\u003e51ba989\u003c/code\u003e\u003c/a\u003e Add support for direct archive dependencies in Git (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/10072\"\u003e#10072\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c07a6efb380b2ecd39161194aa7f3bb5d3f967ca\"\u003e\u003ccode\u003ec07a6ef\u003c/code\u003e\u003c/a\u003e Reject locked malware installations (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/18936\"\u003e#18936\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/58a6734719d19da5335a5985843435745ff93320\"\u003e\u003ccode\u003e58a6734\u003c/code\u003e\u003c/a\u003e Allow environment variables that take a list to be empty (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19503\"\u003e#19503\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/c1477e2b0f9e0ef510554ebfdf76aa68d477dfe6\"\u003e\u003ccode\u003ec1477e2\u003c/code\u003e\u003c/a\u003e Use \u003ccode\u003eUV_NO_SYSTEM_CONFIG\u003c/code\u003e in tests to avoid reading machine-global config (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/4648a0b9e67c2abfd5aa1404d2daeac800b987f5\"\u003e\u003ccode\u003e4648a0b\u003c/code\u003e\u003c/a\u003e uv audit: specialize malformed OSV error (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19515\"\u003e#19515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/e2375abfe10d0e2326bf29c5f425b38f71ebf7db\"\u003e\u003ccode\u003ee2375ab\u003c/code\u003e\u003c/a\u003e Test \u003ccode\u003ecreate_junction\u003c/code\u003e changes from \u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19402\"\u003e#19402\u003c/a\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19487\"\u003e#19487\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/astral-sh/uv/commit/547bf2f9e7f4ff8b3e8a974e0cad3159ac04bb8c\"\u003e\u003ccode\u003e547bf2f\u003c/code\u003e\u003c/a\u003e Avoid unwrapping from \u003ccode\u003eOnceMap\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/astral-sh/uv/issues/19510\"\u003e#19510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/astral-sh/uv/compare/0.11.12...0.11.16\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `virtualenv` from 21.3.1 to 21.3.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pypa/virtualenv/releases\"\u003evirtualenv's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e21.3.3\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAccept GraalPy implementation name. by \u003ca href=\"https://github.com/timfel\"\u003e\u003ccode\u003e@​timfel\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3144\"\u003epypa/virtualenv#3144\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.3.2...21.3.3\"\u003ehttps://github.com/pypa/virtualenv/compare/21.3.2...21.3.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e21.3.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eadd 3.16 to embedded wheel versions by \u003ca href=\"https://github.com/asottile\"\u003e\u003ccode\u003e@​asottile\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3140\"\u003epypa/virtualenv#3140\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e🐛 fix(upgrade): regen embedded init with correct MAX and 3.16 by \u003ca href=\"https://github.com/gaborbernat\"\u003e\u003ccode\u003e@​gaborbernat\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pypa/virtualenv/pull/3143\"\u003epypa/virtualenv#3143\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.3.1...21.3.2\"\u003ehttps://github.com/pypa/virtualenv/compare/21.3.1...21.3.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/pypa/virtualenv/blob/main/docs/changelog.rst\"\u003evirtualenv's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eBugfixes - 21.3.3\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003erecognize GraalPy interpreters using the normalized \u003ccode\u003eGraalPy\u003c/code\u003e name - by :user:\u003ccode\u003etimfel\u003c/code\u003e. (:issue:\u003ccode\u003e3144\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr /\u003e\n\u003cp\u003ev21.3.2 (2026-05-12)\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003eNo significant changes.\u003c/p\u003e\n\u003chr /\u003e\n\u003cp\u003ev21.3.1 (2026-05-05)\u003c/p\u003e\n\u003chr /\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/e6dba2a503560c1561258770ade4d15529c4db3d\"\u003e\u003ccode\u003ee6dba2a\u003c/code\u003e\u003c/a\u003e release 21.3.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/e7517c0e56c159946374c2fed8fb874fd3bde94f\"\u003e\u003ccode\u003ee7517c0\u003c/code\u003e\u003c/a\u003e Accept GraalPy implementation name. (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3144\"\u003e#3144\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/8531d47ff3e78492d0c1eb7d1159750e91176b67\"\u003e\u003ccode\u003e8531d47\u003c/code\u003e\u003c/a\u003e release 21.3.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/afefada9505d4fe67805244c31c5761e4c6c2622\"\u003e\u003ccode\u003eafefada\u003c/code\u003e\u003c/a\u003e 🐛 fix(upgrade): regen embedded init with correct MAX and 3.16 (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3143\"\u003e#3143\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/7e270411ebf5739dfc63998a9084dc2bfd2d467b\"\u003e\u003ccode\u003e7e27041\u003c/code\u003e\u003c/a\u003e [pre-commit.ci] pre-commit autoupdate (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3141\"\u003e#3141\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pypa/virtualenv/commit/214934c9606ef792e42580109cbdff940a62f034\"\u003e\u003ccode\u003e214934c\u003c/code\u003e\u003c/a\u003e add 3.16 to embedded wheel versions (\u003ca href=\"https://redirect.github.com/pypa/virtualenv/issues/3140\"\u003e#3140\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/pypa/virtualenv/compare/21.3.1...21.3.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/karthicraghupathi/django_rapyd_wiretap/pull/23","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/karthicraghupathi%2Fdjango_rapyd_wiretap/issues/23","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/23/packages"}},{"old_version":"7.1.3","new_version":"7.1.4","update_type":"patch","path":null,"pr_created_at":"2026-05-22T11:08:25.000Z","version_change":"7.1.3 → 7.1.4","issue":{"uuid":"4502122071","node_id":"PR_kwDOKB1JPM7eUVqA","number":68,"state":"closed","title":"chore(deps): bump cachetools from 7.1.3 to 7.1.4","user":"dependabot[bot]","labels":["released","dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-22T11:08:40.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-22T11:08:25.000Z","updated_at":"2026-05-22T11:09:04.000Z","time_to_close":15,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps)","packages":[{"name":"cachetools","old_version":"7.1.3","new_version":"7.1.4","repository_url":"https://github.com/tkem/cachetools"}],"path":null,"ecosystem":"pip"},"body":"Bumps [cachetools](https://github.com/tkem/cachetools) from 7.1.3 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\u003c/blockquote\u003e\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\u003eSee full diff in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.1.3...v7.1.4\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cachetools\u0026package-manager=pip\u0026previous-version=7.1.3\u0026new-version=7.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n\u003c/details\u003e","html_url":"https://github.com/hutchic-observe-meta/python-playground/pull/68","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/hutchic-observe-meta%2Fpython-playground/issues/68","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/68/packages"}},{"old_version":"6.2.2","new_version":"7.1.3","update_type":"major","path":null,"pr_created_at":"2026-05-19T08:28:06.000Z","version_change":"6.2.2 → 7.1.3","issue":{"uuid":"4475721777","node_id":"PR_kwDOSbTTLM7c-24h","number":6,"state":"open","title":"Bump the production-dependencies group with 22 updates","user":"dependabot[bot]","labels":[],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":null,"author_association":null,"state_reason":null,"created_at":"2026-05-19T08:28:06.000Z","updated_at":"2026-05-19T08:28:07.000Z","time_to_close":null,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"Bump","group_name":"production-dependencies","update_count":22,"packages":[{"name":"flask","old_version":"3.1.1","new_version":"3.1.3","repository_url":"https://github.com/pallets/flask"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"google-cloud-datastore","old_version":"2.20.2","new_version":"2.21.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"grpcio","old_version":"1.71.0","new_version":"1.80.0","repository_url":"https://github.com/grpc/grpc"},{"name":"gunicorn","old_version":"23.0.0","new_version":"26.0.0","repository_url":"https://github.com/benoitc/gunicorn"},{"name":"pika","old_version":"1.3.2","new_version":"1.4.0","repository_url":"https://github.com/pika/pika"},{"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":"structlog","old_version":"25.2.0","new_version":"25.5.0","repository_url":"https://github.com/hynek/structlog"},{"name":"marshmallow","old_version":"3.26.2","new_version":"4.3.0","repository_url":"https://github.com/marshmallow-code/marshmallow"},{"name":"google-cloud-storage","old_version":"3.1.0","new_version":"3.10.1","repository_url":"https://github.com/googleapis/python-storage"},{"name":"jsonpointer","old_version":"3.0.0","new_version":"3.1.1","repository_url":"https://github.com/stefankoegl/python-json-pointer"},{"name":"redis","old_version":"7.1.0","new_version":"7.4.0","repository_url":"https://github.com/redis/redis-py"},{"name":"flask-compress","old_version":"1.17","new_version":"1.24","repository_url":"https://github.com/colour-science/flask-compress"},{"name":"uwsgi","old_version":"2.0.28","new_version":"2.0.31"},{"name":"email-validator","old_version":"2.2.0","new_version":"2.3.0","repository_url":"https://github.com/JoshData/python-email-validator"},{"name":"google-cloud-pubsub","old_version":"2.29.0","new_version":"2.38.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"google-cloud-tasks","old_version":"2.19.2","new_version":"2.22.0","repository_url":"https://github.com/googleapis/google-cloud-python"},{"name":"simplejson","old_version":"3.20.1","new_version":"4.1.1","repository_url":"https://github.com/simplejson/simplejson"},{"name":"markupsafe","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pallets/markupsafe"},{"name":"cachetools","old_version":"6.2.2","new_version":"7.1.3","repository_url":"https://github.com/tkem/cachetools"},{"name":"gevent","old_version":"25.9.1","new_version":"26.4.0","repository_url":"https://github.com/gevent/gevent"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production-dependencies group with 22 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [flask](https://github.com/pallets/flask) | `3.1.1` | `3.1.3` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [google-cloud-datastore](https://github.com/googleapis/google-cloud-python) | `2.20.2` | `2.21.0` |\n| [grpcio](https://github.com/grpc/grpc) | `1.71.0` | `1.80.0` |\n| [gunicorn](https://github.com/benoitc/gunicorn) | `23.0.0` | `26.0.0` |\n| [pika](https://github.com/pika/pika) | `1.3.2` | `1.4.0` |\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| [structlog](https://github.com/hynek/structlog) | `25.2.0` | `25.5.0` |\n| [marshmallow](https://github.com/marshmallow-code/marshmallow) | `3.26.2` | `4.3.0` |\n| [google-cloud-storage](https://github.com/googleapis/python-storage) | `3.1.0` | `3.10.1` |\n| [jsonpointer](https://github.com/stefankoegl/python-json-pointer) | `3.0.0` | `3.1.1` |\n| [redis](https://github.com/redis/redis-py) | `7.1.0` | `7.4.0` |\n| [flask-compress](https://github.com/colour-science/flask-compress) | `1.17` | `1.24` |\n| [uwsgi](https://uwsgi-docs.readthedocs.io/en/latest/) | `2.0.28` | `2.0.31` |\n| [email-validator](https://github.com/JoshData/python-email-validator) | `2.2.0` | `2.3.0` |\n| [google-cloud-pubsub](https://github.com/googleapis/google-cloud-python) | `2.29.0` | `2.38.0` |\n| [google-cloud-tasks](https://github.com/googleapis/google-cloud-python) | `2.19.2` | `2.22.0` |\n| [simplejson](https://github.com/simplejson/simplejson) | `3.20.1` | `4.1.1` |\n| [markupsafe](https://github.com/pallets/markupsafe) | `3.0.2` | `3.0.3` |\n| [cachetools](https://github.com/tkem/cachetools) | `6.2.2` | `7.1.3` |\n| [gevent](https://github.com/gevent/gevent) | `25.9.1` | `26.4.0` |\n\nUpdates `flask` from 3.1.1 to 3.1.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/releases\"\u003eflask's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.1.3\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.3 security fix release, which fixes a security issue but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.3/\"\u003ehttps://pypi.org/project/Flask/3.1.3/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-3\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-3\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys but not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. \u003ca href=\"https://github.com/pallets/flask/security/advisories/GHSA-68rp-wp8r-4726\"\u003eGHSA-68rp-wp8r-4726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.1.2\u003c/h2\u003e\n\u003cp\u003eThis is the Flask 3.1.2 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/Flask/3.1.2/\"\u003ehttps://pypi.org/project/Flask/3.1.2/\u003c/a\u003e\nChanges: \u003ca href=\"https://flask.palletsprojects.com/page/changes/#version-3-1-2\"\u003ehttps://flask.palletsprojects.com/page/changes/#version-3-1-2\u003c/a\u003e\nMilestone: \u003ca href=\"https://github.com/pallets/flask/milestone/38?closed=1\"\u003ehttps://github.com/pallets/flask/milestone/38?closed=1\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5774\"\u003e#5774\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state of \u003ccode\u003esession\u003c/code\u003e is correct. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5786\"\u003e#5786\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. \u003ca href=\"https://redirect.github.com/pallets/flask/issues/5776\"\u003e#5776\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/flask/blob/main/CHANGES.rst\"\u003eflask's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 3.1.3\u003c/h2\u003e\n\u003cp\u003eReleased 2026-02-18\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe session is marked as accessed for operations that only access the keys\nbut not the values, such as \u003ccode\u003ein\u003c/code\u003e and \u003ccode\u003elen\u003c/code\u003e. :ghsa:\u003ccode\u003e68rp-wp8r-4726\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 3.1.2\u003c/h2\u003e\n\u003cp\u003eReleased 2025-08-19\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estream_with_context\u003c/code\u003e does not fail inside async views. :issue:\u003ccode\u003e5774\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWhen using \u003ccode\u003efollow_redirects\u003c/code\u003e in the test client, the final state\nof \u003ccode\u003esession\u003c/code\u003e is correct. :issue:\u003ccode\u003e5786\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRelax type hint for passing bytes IO to \u003ccode\u003esend_file\u003c/code\u003e. :issue:\u003ccode\u003e5776\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/22d924701a6ae2e4cd01e9a15bbaf3946094af65\"\u003e\u003ccode\u003e22d9247\u003c/code\u003e\u003c/a\u003e release version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/089cb86dd22bff589a4eafb7ab8e42dc357623b4\"\u003e\u003ccode\u003e089cb86\u003c/code\u003e\u003c/a\u003e Merge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/c17f379390731543eea33a570a47bd4ef76a54fa\"\u003e\u003ccode\u003ec17f379\u003c/code\u003e\u003c/a\u003e request context tracks session access\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/27be9338405382445a7cb01151e084559b98d602\"\u003e\u003ccode\u003e27be933\u003c/code\u003e\u003c/a\u003e start version 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4e652d3f68b90d50aa2301d3b7e68c3fafd9251d\"\u003e\u003ccode\u003e4e652d3\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5903\"\u003e#5903\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/3d03098a97ddc6a908aa4a50c2ef7381f8297d0a\"\u003e\u003ccode\u003e3d03098\u003c/code\u003e\u003c/a\u003e Abort if the instance folder cannot be created\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/407eb76b27884848383a37c7274654f0271e4bc4\"\u003e\u003ccode\u003e407eb76\u003c/code\u003e\u003c/a\u003e document using gevent for async (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5900\"\u003e#5900\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/ac5664d2281533eacafd64f5cc7d5edcdaccab60\"\u003e\u003ccode\u003eac5664d\u003c/code\u003e\u003c/a\u003e document using gevent for async\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/4f79d5b59a56bc4356a97f2e81a35f98cb18d7b3\"\u003e\u003ccode\u003e4f79d5b\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11 (\u003ca href=\"https://redirect.github.com/pallets/flask/issues/5865\"\u003e#5865\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/flask/commit/fe3b215d3ade4db68262dae1a3cdc464a1fc524f\"\u003e\u003ccode\u003efe3b215\u003c/code\u003e\u003c/a\u003e Increase required flit_core version to 3.11\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/flask/compare/3.1.1...3.1.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\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-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `google-cloud-datastore` from 2.20.2 to 2.21.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-datastore's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003egoogle-cloud-os-login: v2.21.0\u003c/h2\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-os-login-v2.20.0...google-cloud-os-login-v2.21.0\"\u003ev2.21.0\u003c/a\u003e (2026-05-06)\u003c/h2\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/googleapis/google-cloud-python/blob/main/packages/google-cloud-documentai/CHANGELOG.md\"\u003egoogle-cloud-datastore's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-documentai-v2.21.0\"\u003e2.21.0\u003c/a\u003e (2023-12-07)\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for python 3.12 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eIntroduce compatibility with native namespace packages (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eRequire proto-plus \u0026gt;= 1.22.3 (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eretry_async\u003c/code\u003e instead of \u003ccode\u003eretry\u003c/code\u003e in async client (\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/fb6f9dbfadfe1a8ca3b236e0cae5c85cf2862f3e\"\u003efb6f9db\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/c60ded47847b04b2536f19c1610b5592b7952d6a\"\u003e\u003ccode\u003ec60ded4\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T181058Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15005\"\u003e#15005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c0e3e9d221c3b8cd6d99503fadbb8e643db1e325\"\u003e\u003ccode\u003ec0e3e9d\u003c/code\u003e\u003c/a\u003e chore: disable treat warnings as errors (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15008\"\u003e#15008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45d4cee9e0e48a209b2d9292be29a15125548458\"\u003e\u003ccode\u003e45d4cee\u003c/code\u003e\u003c/a\u003e docs(samples): Update BigQuery Storage Arrow samples batching logic (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14961\"\u003e#14961\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/45149baca6064be265db1b653abb405c298a2b41\"\u003e\u003ccode\u003e45149ba\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20260108T162506Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/15001\"\u003e#15001\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/d58a9ba338df3df1afca11e155fe449c32631179\"\u003e\u003ccode\u003ed58a9ba\u003c/code\u003e\u003c/a\u003e test: Add 'cryptography' 'cachetools' to test deps for bigquery-storage (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14999\"\u003e#14999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/10289465a87988b9bf35a85893f26ea372ad717b\"\u003e\u003ccode\u003e1028946\u003c/code\u003e\u003c/a\u003e feat: add v1 api for google-cloud-maintenance-api (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14998\"\u003e#14998\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/b3cb4de3ce50c3ec55af2b132d756252a32641f3\"\u003e\u003ccode\u003eb3cb4de\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20260107T084051Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14995\"\u003e#14995\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/17cc12897e6afdf3f3131531c50a8226a3f57c0f\"\u003e\u003ccode\u003e17cc128\u003c/code\u003e\u003c/a\u003e chore: librarian generate pull request: 20251231T091651Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14991\"\u003e#14991\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/c353aa5bcc937ef9399c8efc90492dadbcf01aa2\"\u003e\u003ccode\u003ec353aa5\u003c/code\u003e\u003c/a\u003e chore: librarian update image pull request: 20251219T024955Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14985\"\u003e#14985\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/googleapis/google-cloud-python/commit/f38453832a2bb0226c389c30df13d072d1642377\"\u003e\u003ccode\u003ef384538\u003c/code\u003e\u003c/a\u003e chore: librarian release pull request: 20251217T215552Z (\u003ca href=\"https://redirect.github.com/googleapis/google-cloud-python/issues/14980\"\u003e#14980\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/googleapis/google-cloud-python/compare/google-cloud-documentai-v2.20.2...google-cloud-iam-v2.21.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.71.0 to 1.80.0\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.80.0\u003c/h2\u003e\n\u003cp\u003eThis is release 1.80.0 (\u003ca href=\"https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md\"\u003eglimmering\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[ssl] Implement TLS private key signer in Python. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41701\"\u003e#41701\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Private Key Offload Implementation. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41606\"\u003e#41606\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix max sockaddr struct size on OpenBSD. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40454\"\u003e#40454\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[core] Enable EventEngine for Python by default, and EventEngine fork support in Python and Ruby. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41432\"\u003e#41432\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[TLS Credentials]: Create InMemoryCertificateProvider to update certificates independently. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41484\"\u003e#41484\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Ruby] Build/test ruby 4.0 and build native gems with Ruby 4.0 support. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41324\"\u003e#41324\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[EventEngine] Remove an incorrect std::move in DNSServiceResolver constructor. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41502\"\u003e#41502\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[RR and WRR] enable change to connect from a random index. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41472\"\u003e#41472\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[xds] Implement gRFC A101. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41051\"\u003e#41051\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC++\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C++] Add SNI override option to C++ channel credentials options API. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41460\"\u003e#41460\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eC#\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[C# tools] Option to append Async to server side method names \u003ca href=\"https://redirect.github.com/grpc/grpc/issues/39010\"\u003e#39010\u003c/a\u003e. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/39797\"\u003e#39797\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eObjective-C\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Fix][Compiler] Plugins fall back to the edition 2023 for older protobuf. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41357\"\u003e#41357\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePHP\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[PHP] Disable php infinite recursion check for callback from Core to PHP. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41835\"\u003e#41835\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[PHP] Fix runtime error with PHp8.5 alpha because zend_exception_get_defaul…. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40337\"\u003e#40337\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ePython\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e[Python] Fix \u003ccode\u003eGRPC_TRACE\u003c/code\u003e not working when absl log initialized in cython. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRevert \u0026quot;[Python] Align GRPC_ENABLE_FORK_SUPPORT env defaults in core and python (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41455\"\u003e#41455\u003c/a\u003e)\u0026quot;. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41769\"\u003e#41769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Fix AsyncIO Server maximum_concurrent_rpcs enforcement preventing negative active_rpcs count. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41532\"\u003e#41532\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] Docs: correct \u003ccode\u003egrpc.Compression\u003c/code\u003e references. (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/41705\"\u003e#41705\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e[Python] [Typeguard] Part 4 - Add Typeguard to AIO stack in tests . (\u003ca href=\"https://redirect.github.com/grpc/grpc/pull/40226\"\u003e#40226\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/grpc/grpc/commit/f5e2d6e856176c2f6b7691032adfefe21e5f64c1\"\u003e\u003ccode\u003ef5e2d6e\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41857\"\u003e#41857\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/938cfecaebfc28b5e6bcdb95d55aba3962d9b55b\"\u003e\u003ccode\u003e938cfec\u003c/code\u003e\u003c/a\u003e [subchannel connection scaling] fix when we reset backoff (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41935\"\u003e#41935\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/91778bec667d7310864420f2b32aeb2e41e1b51c\"\u003e\u003ccode\u003e91778be\u003c/code\u003e\u003c/a\u003e [Backport][v1.80.x][Python] New \u003ccode\u003e_create\u003c/code\u003e method for aio.Metadata (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41888\"\u003e#41888\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/f10b9f26933703c5fe3e080f50ef19c858d773e0\"\u003e\u003ccode\u003ef10b9f2\u003c/code\u003e\u003c/a\u003e [bzlmod] upgrade rules_swift to avoid BCR CI breakage on Windows with bazel 7...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/be4c1c55b69493868241bfffd4bc318d3d592656\"\u003e\u003ccode\u003ebe4c1c5\u003c/code\u003e\u003c/a\u003e [subchannel] fix crash in connection scaling code (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41853\"\u003e#41853\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/a71df73eafb18fa0210a13dd6a2ce2cb6594d427\"\u003e\u003ccode\u003ea71df73\u003c/code\u003e\u003c/a\u003e [Release] Bump version to 1.80.0-pre1 (on v1.80.x branch) (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41844\"\u003e#41844\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/3ca09e4818f4362e75c9c224f1d4c2065db75a0a\"\u003e\u003ccode\u003e3ca09e4\u003c/code\u003e\u003c/a\u003e [Python] Fix GRPC_TRACE and add test to check the GRPC_TRACE logs print (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41814\"\u003e#41814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/260c6fd37c502e984836a446c5d90e4a1298036d\"\u003e\u003ccode\u003e260c6fd\u003c/code\u003e\u003c/a\u003e [PHP] Disable php infinite recursion check for callback from Core to PHP (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41\"\u003e#41\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/50957c5c47de1c85637fc9dafe6d4eb4c1224f6b\"\u003e\u003ccode\u003e50957c5\u003c/code\u003e\u003c/a\u003e [Flakiness] Delete flaky iomgr fd_conservation_posix_test and create an Event...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/grpc/grpc/commit/e1e1d0a8150b5178d4b75e15f4856a4d825a8999\"\u003e\u003ccode\u003ee1e1d0a\u003c/code\u003e\u003c/a\u003e [Bzlmod] Turn off bzlmod for PSM python tests. (\u003ca href=\"https://redirect.github.com/grpc/grpc/issues/41810\"\u003e#41810\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/grpc/grpc/compare/v1.71.0...v1.80.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `gunicorn` from 23.0.0 to 26.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/benoitc/gunicorn/releases\"\u003egunicorn's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e26.0.0\u003c/h2\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eEventlet worker removed\u003c/strong\u003e: The \u003ccode\u003eeventlet\u003c/code\u003e worker class has been dropped. Migrate to \u003ccode\u003egevent\u003c/code\u003e, \u003ccode\u003egthread\u003c/code\u003e, or \u003ccode\u003etornado\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Features\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Framework Compatibility Suite\u003c/strong\u003e: New end-to-end compatibility test harness covering Starlette, FastAPI, Litestar, Quart, Sanic, and BlackSheep. Current grid passes 438/444 tests (98%).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Test Suite Expansion\u003c/strong\u003e: 134 additional ASGI unit tests covering protocol semantics, lifespan, websockets, and chunked framing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/1.1 Request-Target Validation\u003c/strong\u003e (RFC 9112 sections 3.2.3, 3.2.4):\n\u003cul\u003e\n\u003cli\u003eReject \u003ccode\u003eauthority-form\u003c/code\u003e request-target outside \u003ccode\u003eCONNECT\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003easterisk-form\u003c/code\u003e request-target outside \u003ccode\u003eOPTIONS\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003erelative-reference\u003c/code\u003e request-targets\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHeader Field Hardening\u003c/strong\u003e (RFC 9110):\n\u003cul\u003e\n\u003cli\u003eReject control characters in header field-value (section 5.5)\u003c/li\u003e\n\u003cli\u003eReject forbidden trailer field-names (section 6.5.1)\u003c/li\u003e\n\u003cli\u003eReject \u003ccode\u003eContent-Length\u003c/code\u003e list form (RFC 9112 section 6.3)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRequest Smuggling Hardening\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eTighten keepalive gate and scope \u003ccode\u003efinish_body\u003c/code\u003e byte cap\u003c/li\u003e\n\u003cli\u003eKeep \u003ccode\u003e_body_receiver\u003c/code\u003e alive across the keepalive smuggling gate so pipelined requests cannot re-enter a closed body\u003c/li\u003e\n\u003cli\u003eAddress parser/protocol findings from a six-point WSGI/ASGI audit\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePROXY Protocol (ASGI)\u003c/strong\u003e: Enforce \u003ccode\u003eproxy_allow_ips\u003c/code\u003e and tighten v1/v2 parsing in the ASGI callback parser.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eConnection Draining\u003c/strong\u003e: Drain the connection on close per RFC 9112 section 9.6 to prevent reset-on-close truncation.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBug Fixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eBody Framing on HEAD/204/304\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eKeep \u003ccode\u003eContent-Length\u003c/code\u003e on HEAD and 304 responses (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3621\"\u003e#3621\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop body framing on HEAD/204/304 even when the framework set it\u003c/li\u003e\n\u003cli\u003eWarn once when an ASGI app emits a body for a no-body response\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/2 ASGI\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003e_handle_stream_ended\u003c/code\u003e to set \u003ccode\u003e_body_complete\u003c/code\u003e in the async HTTP/2 handler so request bodies finalize correctly on stream end\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eInvalidChunkExtension\u003c/code\u003e mapping and fast-parser support in ASGI tests (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3565\"\u003e#3565\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eHTTP/1.1 100-Continue\u003c/strong\u003e: Stop adding \u003ccode\u003eTransfer-Encoding: chunked\u003c/code\u003e to 100-Continue interim responses.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWebSocket Close Handshake\u003c/strong\u003e (RFC 6455):\n\u003cul\u003e\n\u003cli\u003eComply with the close handshake state machine\u003c/li\u003e\n\u003cli\u003eClose the transport after the close handshake completes\u003c/li\u003e\n\u003cli\u003eFix binary send when the \u003ccode\u003etext\u003c/code\u003e key is \u003ccode\u003eNone\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEarly Hints\u003c/strong\u003e: Validate headers in the \u003ccode\u003eearly_hints\u003c/code\u003e callback to match \u003ccode\u003eprocess_headers\u003c/code\u003e; pass only the header name to \u003ccode\u003eInvalidHeader\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3588\"\u003e#3588\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eASGI Framework Fixes\u003c/strong\u003e:\n\u003cul\u003e\n\u003cli\u003eFix ASGI disconnect handling for Django-style apps\u003c/li\u003e\n\u003cli\u003eFix Litestar request handling (use raw ASGI receive for body/headers)\u003c/li\u003e\n\u003cli\u003eFix Litestar HTTP endpoints for compatibility tests\u003c/li\u003e\n\u003cli\u003eFix Quart headers endpoint to normalize keys to lowercase\u003c/li\u003e\n\u003cli\u003eFix Quart WebSocket close test app (missing \u003ccode\u003eaccept()\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eFix duplicate \u003ccode\u003eTransfer-Encoding\u003c/code\u003e header for BlackSheep streaming\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/benoitc/gunicorn/commit/5d819cf36040f6cc6175fcc804d703fb899509dd\"\u003e\u003ccode\u003e5d819cf\u003c/code\u003e\u003c/a\u003e release: 26.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/b45c70df105f7d5dcbc5abfb732804d6464edc21\"\u003e\u003ccode\u003eb45c70d\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3611\"\u003e#3611\u003c/a\u003e from zc-mattcen/docs-typo\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/99c8d48acf453deb5c49fe12e195dbc00d888d1e\"\u003e\u003ccode\u003e99c8d48\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3623\"\u003e#3623\u003c/a\u003e from benoitc/chore/drop-eventlet-add-h2-uvloop-test-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/5a655af50f20e005dd9e32e6078dc82fa45f3d4b\"\u003e\u003ccode\u003e5a655af\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3622\"\u003e#3622\u003c/a\u003e from benoitc/test/docker-port-and-ipv4-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/201df19a8011c0a1d6a0e75ebe22e89d48eb935e\"\u003e\u003ccode\u003e201df19\u003c/code\u003e\u003c/a\u003e chore: remove eventlet worker; add h2 and uvloop to test deps\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/f4ac8e1f1bf1d365e77f41915da55bec31873f84\"\u003e\u003ccode\u003ef4ac8e1\u003c/code\u003e\u003c/a\u003e test: pass action name to dirty client and stabilize after TTOU spam\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/54d38afddf1f0db0c15b5f4ff63f3c7bfad96961\"\u003e\u003ccode\u003e54d38af\u003c/code\u003e\u003c/a\u003e test: unblock docker fixtures on macOS hosts\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/68843c8893dd938456f0a2da62085ab5776f8871\"\u003e\u003ccode\u003e68843c8\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3621\"\u003e#3621\u003c/a\u003e from benoitc/fix/asgi-preserve-content-length-on-hea...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/31f2618f733cc0c78690df63f4e344aaf3f56b20\"\u003e\u003ccode\u003e31f2618\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/benoitc/gunicorn/issues/3620\"\u003e#3620\u003c/a\u003e from benoitc/fix/asgi-proxy-protocol-trust-and-parsing\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/benoitc/gunicorn/commit/41ec7527dbd8a9e52728477700707ad40e41d9dc\"\u003e\u003ccode\u003e41ec752\u003c/code\u003e\u003c/a\u003e fix: keep Content-Length on HEAD and 304 responses\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/benoitc/gunicorn/compare/23.0.0...26.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pika` from 1.3.2 to 1.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pika/pika/releases\"\u003epika's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.4.0\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://pypi.org/project/pika/1.4.0/\"\u003ehttps://pypi.org/project/pika/1.4.0/\u003c/a\u003e | \u003ca href=\"https://github.com/pika/pika/milestone/23?closed=1\"\u003eGitHub milestone\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efeat: add python3.10 support and make code python3.7+ by \u003ca href=\"https://github.com/vinitkumar\"\u003e\u003ccode\u003e@​vinitkumar\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1351\"\u003epika/pika#1351\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix typo in example docstring by \u003ca href=\"https://github.com/kinoute\"\u003e\u003ccode\u003e@​kinoute\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1396\"\u003epika/pika#1396\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixing pika v1.0.0 breaking change (order of parameters) for the `cha… by \u003ca href=\"https://github.com/mprinc\"\u003e\u003ccode\u003e@​mprinc\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1393\"\u003epika/pika#1393\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Python 3.11 to various places by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1399\"\u003epika/pika#1399\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation improvements by \u003ca href=\"https://github.com/hcmturner\"\u003e\u003ccode\u003e@​hcmturner\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1403\"\u003epika/pika#1403\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix typo by \u003ca href=\"https://github.com/khadkarajesh\"\u003e\u003ccode\u003e@​khadkarajesh\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1404\"\u003epika/pika#1404\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate example to use python3 syntax by \u003ca href=\"https://github.com/AleksaC\"\u003e\u003ccode\u003e@​AleksaC\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1408\"\u003epika/pika#1408\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix exchange type enum type by \u003ca href=\"https://github.com/liortct\"\u003e\u003ccode\u003e@​liortct\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1410\"\u003epika/pika#1410\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd more connections to the adapters by \u003ca href=\"https://github.com/dgoeries\"\u003e\u003ccode\u003e@​dgoeries\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1405\"\u003epika/pika#1405\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix typo by \u003ca href=\"https://github.com/uwe\"\u003e\u003ccode\u003e@​uwe\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1414\"\u003epika/pika#1414\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFeature \u003ca href=\"https://redirect.github.com/pika/pika/issues/1363\"\u003e#1363\u003c/a\u003e -- Bump examples python version to 3 by \u003ca href=\"https://github.com/alfawal\"\u003e\u003ccode\u003e@​alfawal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1416\"\u003epika/pika#1416\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAttempt to re-enable GeventConnection on Windows by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1417\"\u003epika/pika#1417\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd examples of using client_properties to URLParameters and ConnectionParameters by \u003ca href=\"https://github.com/johanrhodin\"\u003e\u003ccode\u003e@​johanrhodin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1436\"\u003epika/pika#1436\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMisc Windows CI updates by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1438\"\u003epika/pika#1438\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUse sys.platform instead of platform.system() by \u003ca href=\"https://github.com/cvijdea-bd\"\u003e\u003ccode\u003e@​cvijdea-bd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1467\"\u003epika/pika#1467\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eList Python 3.12 as supported by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1474\"\u003epika/pika#1474\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eShrink the compatibility module and remove Python \u0026lt;3.7 support by \u003ca href=\"https://github.com/alfawal\"\u003e\u003ccode\u003e@​alfawal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1441\"\u003epika/pika#1441\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eexample: Remove unnecessary guard by \u003ca href=\"https://github.com/jpmckinney\"\u003e\u003ccode\u003e@​jpmckinney\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1435\"\u003epika/pika#1435\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDifferentiate release types by \u003ccode\u003egithub.event.release.prerelease\u003c/code\u003e by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1477\"\u003epika/pika#1477\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003ebasic_consumer_threaded\u003c/code\u003e example by \u003ca href=\"https://github.com/leogallot\"\u003e\u003ccode\u003e@​leogallot\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1507\"\u003epika/pika#1507\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd description for the example blocking_consume_recover_multiple_hosts by \u003ca href=\"https://github.com/federicsp\"\u003e\u003ccode\u003e@​federicsp\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1512\"\u003epika/pika#1512\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix tests with Python 3.14, except RuntimeError from asyncio.get_event_loop by \u003ca href=\"https://github.com/hroncok\"\u003e\u003ccode\u003e@​hroncok\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1524\"\u003epika/pika#1524\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate ConnectionParameters doc by \u003ca href=\"https://github.com/ryoung9550\"\u003e\u003ccode\u003e@​ryoung9550\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1494\"\u003epika/pika#1494\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate versions by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1514\"\u003epika/pika#1514\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003especify your own consumer_tag when using consume() method of BlockingChannel by \u003ca href=\"https://github.com/ivan-eguidazu\"\u003e\u003ccode\u003e@​ivan-eguidazu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1485\"\u003epika/pika#1485\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremoval of pika.compat.dictkeys() by \u003ca href=\"https://github.com/a-detiste\"\u003e\u003ccode\u003e@​a-detiste\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1492\"\u003epika/pika#1492\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd all public APIs to \u003ccode\u003e__all__\u003c/code\u003e by \u003ca href=\"https://github.com/augustelalande\"\u003e\u003ccode\u003e@​augustelalande\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1476\"\u003epika/pika#1476\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert utcnow() and utcfromtimestamp() by \u003ca href=\"https://github.com/mh21\"\u003e\u003ccode\u003e@​mh21\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1484\"\u003epika/pika#1484\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Issue # 1530: advertise exchange_exchange_bindings  by \u003ca href=\"https://github.com/kenliao94\"\u003e\u003ccode\u003e@​kenliao94\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1540\"\u003epika/pika#1540\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eJpaluska/add threadsafe publisher example by \u003ca href=\"https://github.com/jpaluska\"\u003e\u003ccode\u003e@​jpaluska\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1546\"\u003epika/pika#1546\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd python 3.14 to CI and drop 3.9 by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1549\"\u003epika/pika#1549\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: replace 3 bare except clauses with except Exception by \u003ca href=\"https://github.com/haosenwang1018\"\u003e\u003ccode\u003e@​haosenwang1018\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1545\"\u003epika/pika#1545\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions 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/pika/pika/pull/1552\"\u003epika/pika#1552\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eruff\u003c/code\u003e lint check to CI (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1371\"\u003eGH-1371\u003c/a\u003e) by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1551\"\u003epika/pika#1551\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove dead Code Climate config files by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1553\"\u003epika/pika#1553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs: Add return value documentation for Channel methods (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e) by \u003ca href=\"https://github.com/suchitd\"\u003e\u003ccode\u003e@​suchitd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1555\"\u003epika/pika#1555\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBlockingIOError\u003c/code\u003e from \u003ccode\u003e_read_interrupt\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003eGH-1314\u003c/a\u003e) by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1554\"\u003epika/pika#1554\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImplement tests compatibility patch for RabbitMQ 4.3  by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1548\"\u003epika/pika#1548\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the github-actions 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/pika/pika/pull/1557\"\u003epika/pika#1557\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to pytest by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1550\"\u003epika/pika#1550\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix asyncio.get_event_loop() deprecation in _AsyncioIOServicesAdapter by \u003ca href=\"https://github.com/geomarceau\"\u003e\u003ccode\u003e@​geomarceau\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1544\"\u003epika/pika#1544\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDrop more Python 2 compatibility code by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1561\"\u003epika/pika#1561\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAlign Python versions metadata and docs  by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1556\"\u003epika/pika#1556\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLegacy file fixes by \u003ca href=\"https://github.com/alonfaraj\"\u003e\u003ccode\u003e@​alonfaraj\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1562\"\u003epika/pika#1562\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md with AI agent guidelines by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1560\"\u003epika/pika#1560\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix field table type decoding to match RabbitMQ wire format by \u003ca href=\"https://github.com/lukebakken\"\u003e\u003ccode\u003e@​lukebakken\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pika/pika/pull/1566\"\u003epika/pika#1566\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/pika/pika/blob/main/CHANGELOG.md\"\u003epika's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca href=\"https://github.com/pika/pika/tree/1.4.0\"\u003e1.4.0\u003c/a\u003e (2026-05-06)\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/pika/pika/compare/1.4.0b0...1.4.0\"\u003eFull Changelog\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eImplemented enhancements:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce yapf/google formatting in CI \u003ca href=\"https://redirect.github.com/pika/pika/issues/1558\"\u003e#1558\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd Hatch dev environment and scripts \u003ca href=\"https://redirect.github.com/pika/pika/pull/1579\"\u003e#1579\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDrop more Python 2 compatibility code \u003ca href=\"https://redirect.github.com/pika/pika/pull/1561\"\u003e#1561\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eClosed issues:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdd Hatch scripts to standardize developer commands \u003ca href=\"https://redirect.github.com/pika/pika/issues/1578\"\u003e#1578\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix outdated and broken documentation across the project \u003ca href=\"https://redirect.github.com/pika/pika/issues/1568\"\u003e#1568\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate Codecov default branch and badge \u003ca href=\"https://redirect.github.com/pika/pika/issues/1563\"\u003e#1563\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGitHub actions workflows and test code need updates for RabbitMQ 4.3 \u003ca href=\"https://redirect.github.com/pika/pika/issues/1547\"\u003e#1547\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edatetime.datetime.utcfromtimestamp() is deprecated \u003ca href=\"https://redirect.github.com/pika/pika/issues/1539\"\u003e#1539\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eURLParameters这个类有bug \u003ca href=\"https://redirect.github.com/pika/pika/issues/1533\"\u003e#1533\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCustom transport \u003ca href=\"https://redirect.github.com/pika/pika/issues/1532\"\u003e#1532\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ex-delay value is being returned in the header as a UINT64 and not a SINT16 \u003ca href=\"https://redirect.github.com/pika/pika/issues/1531\"\u003e#1531\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePika should advertise the \u003ccode\u003eexchange_exchange_bindings\u003c/code\u003e client capability \u003ca href=\"https://redirect.github.com/pika/pika/issues/1530\"\u003e#1530\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMissing type annotations \u003ca href=\"https://redirect.github.com/pika/pika/issues/1523\"\u003e#1523\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThere is no info about return type of queue_declare() method of pika.channel \u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGetting the user who sent the message \u003ca href=\"https://redirect.github.com/pika/pika/issues/1510\"\u003e#1510\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eWhere is examples/consume_recover_retry.py ? \u003ca href=\"https://redirect.github.com/pika/pika/issues/1499\"\u003e#1499\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eType Hint Issue with arguments parameter in queue_declare method of BlockingChannel Class - (expected \u0026quot;DeclareOk | None\u0026quot;  [arg-type]) \u003ca href=\"https://redirect.github.com/pika/pika/issues/1482\"\u003e#1482\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003equeue_declare does not receive the callback at random times \u003ca href=\"https://redirect.github.com/pika/pika/issues/1480\"\u003e#1480\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThere is no current event loop in thread \u003ca href=\"https://redirect.github.com/pika/pika/issues/1479\"\u003e#1479\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCannot find reference 'exceptions' in '__init__.pyi'  \u003ca href=\"https://redirect.github.com/pika/pika/issues/1473\"\u003e#1473\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConvert to \u003ccode\u003epytest\u003c/code\u003e \u003ca href=\"https://redirect.github.com/pika/pika/issues/1469\"\u003e#1469\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd a CI lint check using \u003ccode\u003eruff\u003c/code\u003e and fix all findings \u003ca href=\"https://redirect.github.com/pika/pika/issues/1371\"\u003e#1371\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for proxy configuration (Socks5) \u003ca href=\"https://redirect.github.com/pika/pika/issues/1359\"\u003e#1359\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBlockingIOError: [WinError 10035] A non-blocking socket operation could not be completed immediately \u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003e#1314\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eMerged pull requests:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate outdated documentation across the pika project \u003ca href=\"https://redirect.github.com/pika/pika/pull/1577\"\u003e#1577\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix TypeError in select_connection \u003ca href=\"https://redirect.github.com/pika/pika/pull/1575\"\u003e#1575\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSupport Python 3.7+ in CI and fix \u003ccode\u003etyping_extensions\u003c/code\u003e import \u003ca href=\"https://redirect.github.com/pika/pika/pull/1574\"\u003e#1574\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eyapf\u003c/code\u003e formatter enforcement \u003ca href=\"https://redirect.github.com/pika/pika/pull/1573\"\u003e#1573\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003ePIKA_TEST_TLS\u003c/code\u003e env with pytest flag \u003ca href=\"https://redirect.github.com/pika/pika/pull/1572\"\u003e#1572\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix field table type decoding to match RabbitMQ wire format \u003ca href=\"https://redirect.github.com/pika/pika/pull/1566\"\u003e#1566\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eLegacy file fixes \u003ca href=\"https://redirect.github.com/pika/pika/pull/1562\"\u003e#1562\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd AGENTS.md with AI agent guidelines \u003ca href=\"https://redirect.github.com/pika/pika/pull/1560\"\u003e#1560\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 2 updates \u003ca href=\"https://redirect.github.com/pika/pika/pull/1557\"\u003e#1557\u003c/a\u003e (\u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAlign Python versions metadata and docs  \u003ca href=\"https://redirect.github.com/pika/pika/pull/1556\"\u003e#1556\u003c/a\u003e (\u003ca href=\"https://github.com/alonfaraj\"\u003ealonfaraj\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocs: Add return value documentation for Channel methods (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1522\"\u003e#1522\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/pika/pika/pull/1555\"\u003e#1555\u003c/a\u003e (\u003ca href=\"https://github.com/suchitd\"\u003esuchitd\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eBlockingIOError\u003c/code\u003e from \u003ccode\u003e_read_interrupt\u003c/code\u003e on Windows (\u003ca href=\"https://redirect.github.com/pika/pika/issues/1314\"\u003eGH-1314\u003c/a\u003e) \u003ca href=\"https://redirect.github.com/pika/pika/pull/1554\"\u003e#1554\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRemove dead Code Climate config files \u003ca href=\"https://redirect.github.com/pika/pika/pull/1553\"\u003e#1553\u003c/a\u003e (\u003ca href=\"https://github.com/lukebakken\"\u003elukebakken\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump the github-actions group with 4 updates \u003ca href=\"https://redirect.github.com/pika/pika/pull/1552\"\u003e#1552\u003c/a\u003e (\u003ca href=\"https://github.com/apps/dependabot\"\u003edependabot[bot]\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/pika/pika/commit/305fbe60088790a2648580078b4808f138e325d7\"\u003e\u003ccode\u003e305fbe6\u003c/code\u003e\u003c/a\u003e pika 1.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/9a3a6e51d17b2b87b29fb8dc48256e79bfdfea58\"\u003e\u003ccode\u003e9a3a6e5\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pika/pika/issues/1577\"\u003e#1577\u003c/a\u003e from pika/doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/f750ce3a60d7a0cb5cf0fcf68ddb68190935b720\"\u003e\u003ccode\u003ef750ce3\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/ccfe924f5e15b5b1c88384135a64d0f9a6254685\"\u003e\u003ccode\u003eccfe924\u003c/code\u003e\u003c/a\u003e Ensure that pip is run the same way in each workflow.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/47129ca63f282a6b2e8335645236a0fa0b27c0ae\"\u003e\u003ccode\u003e47129ca\u003c/code\u003e\u003c/a\u003e Caching pip artifacts actually does not accomplish anything.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/0a721f75c7eda0923a4390e544341a737d6a7815\"\u003e\u003ccode\u003e0a721f7\u003c/code\u003e\u003c/a\u003e Fix copyright year and document \u003ccode\u003elegacy-python.yaml\u003c/code\u003e workflow\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/f7f51dbd069201a0ff07140cbd3511a36555e398\"\u003e\u003ccode\u003ef7f51db\u003c/code\u003e\u003c/a\u003e Merge branch 'main' into doc/project-scope-update\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/6e6283352e302c8e25dd5151e1a0164901ff8902\"\u003e\u003ccode\u003e6e62833\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/pika/pika/issues/1579\"\u003e#1579\u003c/a\u003e from pika/feature/gh-1578-hatch\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/3d038ad4cf36708a0e19547e5eaccfdd776ef024\"\u003e\u003ccode\u003e3d038ad\u003c/code\u003e\u003c/a\u003e Remove test-requirements.txt and all references to it, since it is superseded...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pika/pika/commit/540db57e418fa58927cff1a3dd4b8aad123dc4c2\"\u003e\u003ccode\u003e540db57\u003c/code\u003e\u003c/a\u003e Fix formatting issue in legacy-python CI workflow for virtualenv installation\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pika/pika/compare/1.3.2...1.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `pyyaml` from 6.0.2 to 6.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/yaml/pyyaml/releases\"\u003epyyaml's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e6.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for Python 3.14 and free-threading (experimental).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\u003ehttps://github.com/yaml/pyyaml/compare/6.0.2...6.0.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/yaml/pyyaml/blob/6.0.3/CHANGES\"\u003epyyaml's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e6.0.3 (2025-09-25)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://redirect.github.com/yaml/pyyaml/pull/864\"\u003eyaml/pyyaml#864\u003c/a\u003e -- Support for Python 3.14 and free-threading (experimental)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/yaml/pyyaml/commit/49790e73684bebad1df05ef8d828fa12f685bffb\"\u003e\u003ccode\u003e49790e7\u003c/code\u003e\u003c/a\u003e Release 6.0.3 (\u003ca href=\"https://redirect.github.com/yaml/pyyaml/issues/889\"\u003e#889\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/yaml/pyyaml/compare/6.0.2...6.0.3\"\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.0 to 2.34.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/releases\"\u003erequests's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find issues, please\nreport them to the \u003ca href=\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned tracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e to avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their code. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and \u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and removed \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to \u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e implementations\nweren't being properly detected as Iterables. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy, pyright,\nand ty. We believe types are comprehensive but if you find issues, please\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca href=\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added \u003ccode\u003eusedforsecurity=False\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream projects\nshould be able to start testing prior to its release in October. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to itself, preventing\naccidental looping when traversing the history list. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython's fix from\nbpo-39057. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e v2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e Move Request.headers back to Mapping (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e v2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e Fix mutability issues with headers input types (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e Update JsonType containers to read-based collections (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e Constrain Response.reason to str (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for \u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e v2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e Align Session.get parameters with requests.get (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e Port bpo-39057 to Requests (\u003ca href=\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/psf/requests/compare/v2.33.0...v2.34.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `structlog` from 25.2.0 to 25.5.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/hynek/structlog/releases\"\u003estructlog's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e25.5.0\u003c/h2\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cp\u003eHuge release! There's plenty of important little bug fixes and new features, but the headliner is definitely the improved ergonomics of \u003ccode\u003estructlog.dev.ConsoleRenderer\u003c/code\u003e. We have finally accepted that local development has different priorities than production and made it both mutable (with automatic re-configuration) and also easily retrievable (\u003ccode\u003ecr = ConsoleRenderer.get_active()\u003c/code\u003e). This allows you, for example, to disable Rich exception formatting as easily as \u003ccode\u003estructlog.dev.ConsoleRenderer.get_active().exception_formatter = structlog.dev.plain_traceback\u003c/code\u003e. Please check out the \u003ca href=\"https://www.structlog.org/en/stable/console-output.html\"\u003eupdated docs\u003c/a\u003e!\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://www.thanks.dev\"\u003ethanks.dev\u003c/a\u003e (@\u003ca href=\"https://github.com/thnxdev\"\u003ethnxdev\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=\"https://quesma.com/\"\u003eQuesma\u003c/a\u003e (\u003ca href=\"https://github.com/QuesmaOrg\"\u003e\u003ccode\u003e@​QuesmaOrg\u003c/code\u003e\u003c/a\u003e), \u003ca href=\"http://filepreviews.io/\"\u003eFilePreviews\u003c/a\u003e (@\u003ca href=\"https://gi...\n\n_Description has been truncated_","html_url":"https://github.com/ONSdigital/census31-eq-questionnaire-runner/pull/6","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/ONSdigital%2Fcensus31-eq-questionnaire-runner/issues/6","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/6/packages"}},{"old_version":"7.0.4","new_version":"7.1.3","update_type":"minor","path":null,"pr_created_at":"2026-05-19T03:33:35.000Z","version_change":"7.0.4 → 7.1.3","issue":{"uuid":"4474185928","node_id":"PR_kwDOLsrafc7c579l","number":18,"state":"closed","title":"deps(py): bump the python-minor group across 1 directory with 44 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-25T23:52:53.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-19T03:33:35.000Z","updated_at":"2026-05-25T23:52:55.000Z","time_to_close":591558,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"deps(py): bump","group_name":"python-minor","update_count":44,"packages":[{"name":"anyio","old_version":"4.12.1","new_version":"4.13.0","repository_url":"https://github.com/agronholm/anyio"},{"name":"cachetools","old_version":"7.0.4","new_version":"7.1.3","repository_url":"https://github.com/tkem/cachetools"},{"name":"charset-normalizer","old_version":"3.4.6","new_version":"3.4.7","repository_url":"https://github.com/jawah/charset_normalizer"},{"name":"choreographer","old_version":"1.2.1","new_version":"1.3.0","repository_url":"https://github.com/plotly/choreographer"},{"name":"click","old_version":"8.3.1","new_version":"8.4.0","repository_url":"https://github.com/pallets/click"},{"name":"decorator","old_version":"5.2.1","new_version":"5.3.1","repository_url":"https://github.com/micheles/decorator"},{"name":"duckdb","old_version":"1.5.0","new_version":"1.5.2","repository_url":"https://github.com/duckdb/duckdb-python"},{"name":"flask-wtf","old_version":"1.2.2","new_version":"1.3.0","repository_url":"https://github.com/pallets-eco/flask-wtf"},{"name":"greenlet","old_version":"3.3.2","new_version":"3.5.0","repository_url":"https://github.com/python-greenlet/greenlet"},{"name":"idna","old_version":"3.11","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"ipython","old_version":"9.11.0","new_version":"9.13.0","repository_url":"https://github.com/ipython/ipython"},{"name":"jedi","old_version":"0.19.2","new_version":"0.20.0","repository_url":"https://github.com/davidhalter/jedi"},{"name":"kaleido","old_version":"1.2.0","new_version":"1.3.0","repository_url":"https://github.com/plotly/kaleido"},{"name":"llvmlite","old_version":"0.46.0b1","new_version":"0.47.0","repository_url":"https://github.com/numba/llvmlite"},{"name":"markdown-it-py","old_version":"4.0.0","new_version":"4.2.0","repository_url":"https://github.com/executablebooks/markdown-it-py"},{"name":"matplotlib-inline","old_version":"0.2.1","new_version":"0.2.2","repository_url":"https://github.com/ipython/matplotlib-inline"},{"name":"mcp","old_version":"1.26.0","new_version":"1.27.1","repository_url":"https://github.com/modelcontextprotocol/python-sdk"},{"name":"py-vollib","old_version":"1.0.1","new_version":"1.0.7","repository_url":"https://github.com/vollib/py_vollib"},{"name":"narwhals","old_version":"2.18.0","new_version":"2.21.2","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"numba","old_version":"0.64.0","new_version":"0.65.1","repository_url":"https://github.com/numba/numba"},{"name":"numpy","old_version":"2.4.3","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"openalgo","old_version":"1.0.46","new_version":"1.0.50","repository_url":"https://github.com/openalgo/openalgo-python"},{"name":"orjson","old_version":"3.11.7","new_version":"3.11.9","repository_url":"https://github.com/ijl/orjson"},{"name":"parso","old_version":"0.8.6","new_version":"0.8.7","repository_url":"https://github.com/davidhalter/parso"},{"name":"pillow","old_version":"12.1.1","new_version":"12.2.0","repository_url":"https://github.com/python-pillow/Pillow"},{"name":"platformdirs","old_version":"4.9.4","new_version":"4.9.6","repository_url":"https://github.com/tox-dev/platformdirs"},{"name":"plotly","old_version":"6.6.0","new_version":"6.7.0","repository_url":"https://github.com/plotly/plotly.py"},{"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.46.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"pydantic-settings","old_version":"2.13.1","new_version":"2.14.1","repository_url":"https://github.com/pydantic/pydantic-settings"},{"name":"pygments","old_version":"2.19.2","new_version":"2.20.0","repository_url":"https://github.com/pygments/pygments"},{"name":"pytest","old_version":"9.0.2","new_version":"9.0.3","repository_url":"https://github.com/pytest-dev/pytest"},{"name":"python-multipart","old_version":"0.0.22","new_version":"0.0.29","repository_url":"https://github.com/Kludex/python-multipart"},{"name":"python-telegram-bot","old_version":"22.6","new_version":"22.7","repository_url":"https://github.com/python-telegram-bot/python-telegram-bot"},{"name":"pytz","old_version":"2026.1.post1","new_version":"2026.2","repository_url":"https://github.com/stub42/pytz"},{"name":"requests","old_version":"2.33.0","new_version":"2.34.2","repository_url":"https://github.com/psf/requests"},{"name":"sqlalchemy","old_version":"2.0.48","new_version":"2.0.49","repository_url":"https://github.com/sqlalchemy/sqlalchemy"},{"name":"traitlets","old_version":"5.14.3","new_version":"5.15.0","repository_url":"https://github.com/ipython/traitlets"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"},{"name":"uvicorn","old_version":"0.42.0","new_version":"0.47.0","repository_url":"https://github.com/Kludex/uvicorn"},{"name":"wcwidth","old_version":"0.6.0","new_version":"0.7.0","repository_url":"https://github.com/jquast/wcwidth"},{"name":"werkzeug","old_version":"3.1.6","new_version":"3.1.8","repository_url":"https://github.com/pallets/werkzeug"},{"name":"wheel","old_version":"0.46.3","new_version":"0.47.0","repository_url":"https://github.com/pypa/wheel"},{"name":"wtforms","old_version":"3.2.1","new_version":"3.2.2","repository_url":"https://github.com/pallets-eco/wtforms"}],"path":null,"ecosystem":"pip"},"body":"Bumps the python-minor group with 44 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [anyio](https://github.com/agronholm/anyio) | `4.12.1` | `4.13.0` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.4` | `7.1.3` |\n| [charset-normalizer](https://github.com/jawah/charset_normalizer) | `3.4.6` | `3.4.7` |\n| [choreographer](https://github.com/plotly/choreographer) | `1.2.1` | `1.3.0` |\n| [click](https://github.com/pallets/click) | `8.3.1` | `8.4.0` |\n| [decorator](https://github.com/micheles/decorator) | `5.2.1` | `5.3.1` |\n| [duckdb](https://github.com/duckdb/duckdb-python) | `1.5.0` | `1.5.2` |\n| [flask-wtf](https://github.com/pallets-eco/flask-wtf) | `1.2.2` | `1.3.0` |\n| [greenlet](https://github.com/python-greenlet/greenlet) | `3.3.2` | `3.5.0` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.15` |\n| [ipython](https://github.com/ipython/ipython) | `9.11.0` | `9.13.0` |\n| [jedi](https://github.com/davidhalter/jedi) | `0.19.2` | `0.20.0` |\n| [kaleido](https://github.com/plotly/kaleido) | `1.2.0` | `1.3.0` |\n| [llvmlite](https://github.com/numba/llvmlite) | `0.46.0b1` | `0.47.0` |\n| [markdown-it-py](https://github.com/executablebooks/markdown-it-py) | `4.0.0` | `4.2.0` |\n| [matplotlib-inline](https://github.com/ipython/matplotlib-inline) | `0.2.1` | `0.2.2` |\n| [mcp](https://github.com/modelcontextprotocol/python-sdk) | `1.26.0` | `1.27.1` |\n| [py-vollib](https://github.com/vollib/py_vollib) | `1.0.1` | `1.0.7` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.18.0` | `2.21.2` |\n| [numba](https://github.com/numba/numba) | `0.64.0` | `0.65.1` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.3` | `2.4.6` |\n| [openalgo](https://github.com/openalgo/openalgo-python) | `1.0.46` | `1.0.50` |\n| [orjson](https://github.com/ijl/orjson) | `3.11.7` | `3.11.9` |\n| [parso](https://github.com/davidhalter/parso) | `0.8.6` | `0.8.7` |\n| [pillow](https://github.com/python-pillow/Pillow) | `12.1.1` | `12.2.0` |\n| [platformdirs](https://github.com/tox-dev/platformdirs) | `4.9.4` | `4.9.6` |\n| [plotly](https://github.com/plotly/plotly.py) | `6.6.0` | `6.7.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.46.4` |\n| [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.13.1` | `2.14.1` |\n| [pygments](https://github.com/pygments/pygments) | `2.19.2` | `2.20.0` |\n| [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.0.3` |\n| [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.22` | `0.0.29` |\n| [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) | `22.6` | `22.7` |\n| [pytz](https://github.com/stub42/pytz) | `2026.1.post1` | `2026.2` |\n| [requests](https://github.com/psf/requests) | `2.33.0` | `2.34.2` |\n| [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) | `2.0.48` | `2.0.49` |\n| [traitlets](https://github.com/ipython/traitlets) | `5.14.3` | `5.15.0` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n| [uvicorn](https://github.com/Kludex/uvicorn) | `0.42.0` | `0.47.0` |\n| [wcwidth](https://github.com/jquast/wcwidth) | `0.6.0` | `0.7.0` |\n| [werkzeug](https://github.com/pallets/werkzeug) | `3.1.6` | `3.1.8` |\n| [wheel](https://github.com/pypa/wheel) | `0.46.3` | `0.47.0` |\n| [wtforms](https://github.com/pallets-eco/wtforms) | `3.2.1` | `3.2.2` |\n\n\nUpdates `anyio` from 4.12.1 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\u003c/blockquote\u003e\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.12.1...4.13.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.4 to 7.1.3\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.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\u003ch1\u003ev7.0.5 (2026-03-09)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMinor \u003ccode\u003e@cachedmethod\u003c/code\u003e performance 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/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\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/ed107816b6787d74f21684f6614d4fbbbbb935de\"\u003e\u003ccode\u003eed10781\u003c/code\u003e\u003c/a\u003e Update Copilot instructions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/c624ceb350d50bb733ccaa706613495999b9479f\"\u003e\u003ccode\u003ec624ceb\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/395\"\u003e#395\u003c/a\u003e: Document FIFOCache update behavior.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/1ddec068633641895b6926dcea27276d5149c038\"\u003e\u003ccode\u003e1ddec06\u003c/code\u003e\u003c/a\u003e Fix/396 (\u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/b91818c46624b3be3f4b321426061ba50c08a30e\"\u003e\u003ccode\u003eb91818c\u003c/code\u003e\u003c/a\u003e Drop MANIFEST.in.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.0.4...v7.1.3\"\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 `choreographer` from 1.2.1 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/choreographer/blob/main/CHANGELOG.txt\"\u003echoreographer's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003ev1.3.0\nv1.3.0rc2\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCheck path validity for browser with is_file()\u003c/li\u003e\n\u003cli\u003eAdd option --verify_local in choreo_diagnose and fix local reporting logic\nv1.3.0rc1\u003c/li\u003e\n\u003cli\u003eWe now look for old download path as well as new download path\nv1.3.0rc0\u003c/li\u003e\n\u003cli\u003eChange to process group for better killing of multi-process chrome\u003c/li\u003e\n\u003cli\u003eAdd argument to Session/Target \u003ccode\u003esend_command(..., *, with_perf: bool)\u003c/code\u003e to\nreturn timing information about browser write/read.\u003c/li\u003e\n\u003cli\u003eUpdate default chrome from 135.0.7011.0/1418433 to 144.0.7527.0/1544685\u003c/li\u003e\n\u003cli\u003eFix: New chrome takes longer/doesn't populate targets right away, so add a\nretry loop to populate targets\u003c/li\u003e\n\u003cli\u003eAlter \u003ccode\u003eget_chrome\u003c/code\u003e verbose to print whole JSON\u003c/li\u003e\n\u003cli\u003eChange chrome download path to use XDG cache dir\u003c/li\u003e\n\u003cli\u003eDon't download chrome if we already have that version: add force argument\u003c/li\u003e\n\u003cli\u003eRemove unused system inspection code\u003c/li\u003e\n\u003cli\u003eAdd a set of helper functions to await for tab loading and send javascript\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/choreographer/commit/92147b1ccf024ae647f29ebf43057564011e06c9\"\u003e\u003ccode\u003e92147b1\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/296\"\u003e#296\u003c/a\u003e from plotly/cam/update-changelog-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/8851fc919bc7dfb27a48541543f1ff195c48eda3\"\u003e\u003ccode\u003e8851fc9\u003c/code\u003e\u003c/a\u003e Updates to release version v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/3128bddf909381a2b4205f0e28c0c3cb8b13498c\"\u003e\u003ccode\u003e3128bdd\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/288\"\u003e#288\u003c/a\u003e from plotly/andrew/more_local_logic\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/a6f478e00fb81ad22db7c7c1d31028fb4ab20311\"\u003e\u003ccode\u003ea6f478e\u003c/code\u003e\u003c/a\u003e Add to changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/953e19ad5dc395a3554cfbaf25599a8a3db6d933\"\u003e\u003ccode\u003e953e19a\u003c/code\u003e\u003c/a\u003e Check browser is file whwen checking path validity\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/d062e355b819b84e57060d4e48fbe2aa6f063259\"\u003e\u003ccode\u003ed062e35\u003c/code\u003e\u003c/a\u003e Change default setting\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c0c97fc64a55c773dd7484674996cf55d74249a1\"\u003e\u003ccode\u003ec0c97fc\u003c/code\u003e\u003c/a\u003e Add option to verify local with choreo_diagnose\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/7ade1922269a6999c06f2ff92b34a1770bba6d3e\"\u003e\u003ccode\u003e7ade192\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/choreographer/issues/286\"\u003e#286\u003c/a\u003e from plotly/andrew/roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/edf284c8973dd9dc7f7b2f77a53481fe6f0d2671\"\u003e\u003ccode\u003eedf284c\u003c/code\u003e\u003c/a\u003e Update Roadmap\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/choreographer/commit/c1b7abce535feb79748c888ba1130b985c13eb3f\"\u003e\u003ccode\u003ec1b7abc\u003c/code\u003e\u003c/a\u003e Changelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/choreographer/compare/v1.2.1...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `click` from 8.3.1 to 8.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.0/\"\u003ehttps://pypi.org/project/click/8.4.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParamType\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3371\"\u003e#3371\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3372\"\u003e#3372\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParameter\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2805\"\u003e#2805\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e is now an abstract base class, making explicit\nthat it cannot be instantiated directly.\u003c/li\u003e\n\u003cli\u003e:attr:\u003ccode\u003eParameter.name\u003c/code\u003e is now \u003ccode\u003estr\u003c/code\u003e instead of \u003ccode\u003estr | None\u003c/code\u003e.\nWhen \u003ccode\u003eexpose_value=False\u003c/code\u003e, the name is set to \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e instead\nof \u003ccode\u003eNone\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ectx\u003c/code\u003e parameter of :meth:\u003ccode\u003eParameter.get_error_hint\u003c/code\u003e is now\ntyped as \u003ccode\u003eContext | None\u003c/code\u003e, matching the runtime behavior.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSplit string values from \u003ccode\u003edefault_map\u003c/code\u003e for parameters with \u003ccode\u003enargs \u0026gt; 1\u003c/code\u003e\nor :class:\u003ccode\u003eTuple\u003c/code\u003e type, matching environment variable behavior.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/2745\"\u003e#2745\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3364\"\u003e#3364\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAuto-detect \u003ccode\u003etype=UNPROCESSED\u003c/code\u003e for \u003ccode\u003eflag_value\u003c/code\u003e of non-basic types\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2012\"\u003e#2012\u003c/a\u003e \u003ca href=\"https://redirect.github.com/pallets/click/issues/3363\"\u003e#3363\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe error hint now uses \u003ccode\u003eCommand.get_help_option_names\u003c/code\u003e to pick\nnon-shadowed help option names, so \u003ccode\u003eTry '... -h'\u003c/code\u003e no longer points to a\nsubcommand option that shadows \u003ccode\u003e-h\u003c/code\u003e. All surviving names are shown\n(\u003ccode\u003e-h/--help\u003c/code\u003e). \u003ca href=\"https://redirect.github.com/pallets/click/issues/2790\"\u003e#2790\u003c/a\u003e  \u003ca href=\"https://redirect.github.com/pallets/click/issues/3208\"\u003e#3208\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix readline functionality on non-Windows platforms. Prompt text is now\npassed directly to readline instead of being printed separately, allowing\nproper backspace, line editing, and line wrapping behavior. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2968\"\u003e#2968\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/blob/main/CHANGES.rst\"\u003eclick's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 8.4.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-05-17\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e typing improvements. :pr:\u003ccode\u003e3371\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n:pr:\u003ccode\u003e3372\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e typing improvements. :pr:\u003ccode\u003e2805\u003c/code\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParameter\u003c/code\u003e is now an abstract base class, making explicit\nthat it cannot be instantiated directly.\u003c/li\u003e\n\u003cli\u003e:attr:\u003ccode\u003eParameter.name\u003c/code\u003e is now \u003ccode\u003estr\u003c/code\u003e instead of \u003ccode\u003estr | None\u003c/code\u003e.\nWhen \u003ccode\u003eexpose_value=False\u003c/code\u003e, the name is set to \u003ccode\u003e\u0026quot;\u0026quot;\u003c/code\u003e instead\nof \u003ccode\u003eNone\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ectx\u003c/code\u003e parameter of :meth:\u003ccode\u003eParameter.get_error_hint\u003c/code\u003e is now\ntyped as \u003ccode\u003eContext | None\u003c/code\u003e, matching the runtime behavior.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSplit string values from \u003ccode\u003edefault_map\u003c/code\u003e for parameters with \u003ccode\u003enargs \u0026gt; 1\u003c/code\u003e\nor :class:\u003ccode\u003eTuple\u003c/code\u003e type, matching environment variable behavior.\n:issue:\u003ccode\u003e2745\u003c/code\u003e :pr:\u003ccode\u003e3364\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAuto-detect \u003ccode\u003etype=UNPROCESSED\u003c/code\u003e for \u003ccode\u003eflag_value\u003c/code\u003e of non-basic types\n(not \u003ccode\u003estr\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, or \u003ccode\u003ebool\u003c/code\u003e), so programmer-provided\nPython objects like classes and enum members are passed through unchanged\ninstead of being stringified. Previously \u003ccode\u003etype=click.UNPROCESSED\u003c/code\u003e had\nto be set explicitly. :issue:\u003ccode\u003e2012\u003c/code\u003e :pr:\u003ccode\u003e3363\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eThe error hint now uses :meth:\u003ccode\u003eCommand.get_help_option_names\u003c/code\u003e to pick\nnon-shadowed help option names, so \u003ccode\u003eTry '... -h'\u003c/code\u003e no longer points to a\nsubcommand option that shadows \u003ccode\u003e-h\u003c/code\u003e. All surviving names are shown\n(\u003ccode\u003e-h/--help\u003c/code\u003e). :issue:\u003ccode\u003e2790\u003c/code\u003e :pr:\u003ccode\u003e3208\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix readline functionality on non-Windows platforms. Prompt text is now\npassed directly to readline instead of being printed separately, allowing\nproper backspace, line editing, and line wrapping behavior. :issue:\u003ccode\u003e2968\u003c/code\u003e\n:pr:\u003ccode\u003e2969\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse :func:\u003ccode\u003eos.startfile\u003c/code\u003e on Windows to open URLs in :func:\u003ccode\u003eopen_url\u003c/code\u003e,\nreplacing the \u003ccode\u003estart\u003c/code\u003e built-in which cannot be invoked without\n\u003ccode\u003eshell=True\u003c/code\u003e. :issue:\u003ccode\u003e3164\u003c/code\u003e :pr:\u003ccode\u003e3186\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix Fish shell completion errors when option help text contains newlines.\n:issue:\u003ccode\u003e3043\u003c/code\u003e :pr:\u003ccode\u003e3126\u003c/code\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/41f410fb7528305d7e87c8cfa704f6c2456f57fc\"\u003e\u003ccode\u003e41f410f\u003c/code\u003e\u003c/a\u003e Release 8.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/e3e69e3bf8d749ac1a632f2ece4d38ec7f6588f5\"\u003e\u003ccode\u003ee3e69e3\u003c/code\u003e\u003c/a\u003e Add type annotations for instance attributes in \u003ccode\u003eutils\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3422\"\u003e#3422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/3bb230dcd5d751f8605b46e9df5a541639d5fd4e\"\u003e\u003ccode\u003e3bb230d\u003c/code\u003e\u003c/a\u003e WIP: Fix \u003ccode\u003eHelpFormatter.write_usage\u003c/code\u003e producing spurious characters (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3434\"\u003e#3434\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/63274a79d08fdc5c19220696144489f7144a8547\"\u003e\u003ccode\u003e63274a7\u003c/code\u003e\u003c/a\u003e \u003ccode\u003eclick.get_pager_file\u003c/code\u003e: add tests (\u003ca href=\"https://redirect.github.com/pallets/click/issues/1572\"\u003e#1572\u003c/a\u003e followup) (\u003ca href=\"https://redirect.github.com/pallets/click/issues/3405\"\u003e#3405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/0551bf53588ae87f462d336f24f853a156fefe3a\"\u003e\u003ccode\u003e0551bf5\u003c/code\u003e\u003c/a\u003e Fix \u003ccode\u003eHelpFormatter.write_usage\u003c/code\u003e producing spurious characters\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/fc41aa1d0b62494eb93e92ff3929601221e3abf4\"\u003e\u003ccode\u003efc41aa1\u003c/code\u003e\u003c/a\u003e Apply class-body annotations to \u003ccode\u003eKeepOpenFile\u003c/code\u003e for consistency\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/b761eda3bad977ec2f485451d85fd8ec365f0bf4\"\u003e\u003ccode\u003eb761eda\u003c/code\u003e\u003c/a\u003e Skip some tests on Windows\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/98302ac4f49e443a48abd3fbb95c86202b89547d\"\u003e\u003ccode\u003e98302ac\u003c/code\u003e\u003c/a\u003e Check \u003ccode\u003ePAGER\u003c/code\u003e usage, color preservation and edge-cases\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/dbdae170879d460e78963f8af35c5cb9c5b86e89\"\u003e\u003ccode\u003edbdae17\u003c/code\u003e\u003c/a\u003e Fix documentation\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets/click/commit/1aa2d53d63ff68bf14b35931177aac9270e39713\"\u003e\u003ccode\u003e1aa2d53\u003c/code\u003e\u003c/a\u003e Redesigned tests and get_pager_file branching to be more clear and not set color\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets/click/compare/8.3.1...8.4.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `decorator` from 5.2.1 to 5.3.1\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/micheles/decorator/blob/master/CHANGES.md\"\u003edecorator's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.3.1 (2026-05-18)\u003c/h2\u003e\n\u003cp\u003eAdded license SPDX identifier to pyproject.toml (reported by\nChristian Lackas).\u003c/p\u003e\n\u003ch2\u003e5.3.0 (2026-05-17)\u003c/h2\u003e\n\u003cp\u003eAdded official support for Python 3.14 (thanks to Hugo van Kemenade,\nDavid Cain and the GitHub user bersbersbers).\nFixed a bug with \u0026quot;return await\u0026quot; contributed by Kadir Can Ozden.\nMoved decorator.py to a package structure (\u003ccode\u003edecorator/__init__.py\u003c/code\u003e) and\nadded a stub file (\u003ccode\u003edecorator/__init__.pyi\u003c/code\u003e) contributed by Marco Gorelli.\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/micheles/decorator/commit/426e9e35d563ffe356e54bd0f970d153b8f25370\"\u003e\u003ccode\u003e426e9e3\u003c/code\u003e\u003c/a\u003e Bumped the version to 5.3.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/062ff0e0c33733f2148a5590d118a8570df846d5\"\u003e\u003ccode\u003e062ff0e\u003c/code\u003e\u003c/a\u003e Fixed the dependency on setuptools\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/086ff5d95d4dc550117c12647a4427d70bf8833d\"\u003e\u003ccode\u003e086ff5d\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/5807a83ead31f0de5303fa950ddea49d850d7355\"\u003e\u003ccode\u003e5807a83\u003c/code\u003e\u003c/a\u003e Updated license\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/093aced11439251e496b47a9a9369501075e8d1a\"\u003e\u003ccode\u003e093aced\u003c/code\u003e\u003c/a\u003e Updated changelog\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/e9ced7e63ad9502b3e2a3e3db5f5f1ccc16c5fd6\"\u003e\u003ccode\u003ee9ced7e\u003c/code\u003e\u003c/a\u003e Added license SPDX\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/b3e82ddc04e8d0c18c51eecb30b4a59aee5aac1d\"\u003e\u003ccode\u003eb3e82dd\u003c/code\u003e\u003c/a\u003e Fixed CHANGES.md [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/f1ce8da8522193421436c368849afe886666b4e5\"\u003e\u003ccode\u003ef1ce8da\u003c/code\u003e\u003c/a\u003e Doc fix [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/c924d7c6aa2e47a0627706c385101ff8d558d091\"\u003e\u003ccode\u003ec924d7c\u003c/code\u003e\u003c/a\u003e Updated supported versions [ci skip]\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/micheles/decorator/commit/8b83e8cca35f5c773654ce4ae89b4e3f84f430d3\"\u003e\u003ccode\u003e8b83e8c\u003c/code\u003e\u003c/a\u003e Fixed CHANGES [ci skip]\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/micheles/decorator/compare/5.2.1...5.3.1\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `duckdb` from 1.5.0 to 1.5.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/duckdb/duckdb-python/releases\"\u003educkdb's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.5.2 Bugfix Release\u003c/h2\u003e\n\u003cp\u003eSee the DuckDB core release notes here: \u003ca href=\"https://github.com/duckdb/duckdb/releases/tag/v1.5.2\"\u003ehttps://github.com/duckdb/duckdb/releases/tag/v1.5.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed in duckdb-python\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eType hints overhaul by \u003ca href=\"https://github.com/OutSquareCapital\"\u003e\u003ccode\u003e@​OutSquareCapital\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/352\"\u003educkdb/duckdb-python#352\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCache arrow schema for streaming types by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/423\"\u003educkdb/duckdb-python#423\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix segfault on join with None by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/422\"\u003educkdb/duckdb-python#422\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix stubs for path_or_buffer param by \u003ca href=\"https://github.com/evertlammerts\"\u003e\u003ccode\u003e@​evertlammerts\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/pull/425\"\u003educkdb/duckdb-python#425\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.5.1 Bugfix Release\u003c/h2\u003e\n\u003cp\u003eDuckDB core v1.5.1 Changelog: \u003ca href=\"https://github.com/duckdb/duckdb/compare/v1.5.0...v1.5.1\"\u003ehttps://github.com/duckdb/duckdb/compare/v1.5.0...v1.5.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRe-added basic support for the GEOMETRY type\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/2aea44eeae35b9c77dc2ff672634034a75c9bb16\"\u003e\u003ccode\u003e2aea44e\u003c/code\u003e\u003c/a\u003e pin submodule at release hash\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/3aa2bf2022b91dc9a96c3f91c8bb1fb0296586ef\"\u003e\u003ccode\u003e3aa2bf2\u003c/code\u003e\u003c/a\u003e Fix stubs for path_or_buffer param (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/425\"\u003e#425\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/018fe057d5a003355deb4213a894af559a947aa7\"\u003e\u003ccode\u003e018fe05\u003c/code\u003e\u003c/a\u003e Fix stubs for path_or_buffer param\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/0ef05d69fc8a123cf532f3ffb3e088212bbbfaf7\"\u003e\u003ccode\u003e0ef05d6\u003c/code\u003e\u003c/a\u003e Fix segfault on join with None (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/422\"\u003e#422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/4acb9f71e00c5002d3ab3aba78a172df8f7ebbc4\"\u003e\u003ccode\u003e4acb9f7\u003c/code\u003e\u003c/a\u003e Fix segfault on join\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/6f161de62403c209633fcbd52c6c0403dadef7da\"\u003e\u003ccode\u003e6f161de\u003c/code\u003e\u003c/a\u003e Cache arrow schema for streaming types (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/423\"\u003e#423\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/87d6a319674c5e2fb855e140bf539e997e978a2e\"\u003e\u003ccode\u003e87d6a31\u003c/code\u003e\u003c/a\u003e Add CLAUDE.md\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/ae356cb03926372b9cd3736f39662efd25bb4915\"\u003e\u003ccode\u003eae356cb\u003c/code\u003e\u003c/a\u003e Cache the arrow schema for streams so we don't need an active client context\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/b71639f215d29c4f8b1c53cb3d7cf45603f4c5d2\"\u003e\u003ccode\u003eb71639f\u003c/code\u003e\u003c/a\u003e Test that client context stays open on arrow streams\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/duckdb/duckdb-python/commit/305d11457efd4ca0767cad0868b16310b04160a7\"\u003e\u003ccode\u003e305d114\u003c/code\u003e\u003c/a\u003e fix spark test (\u003ca href=\"https://redirect.github.com/duckdb/duckdb-python/issues/421\"\u003e#421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/duckdb/duckdb-python/compare/v1.5.0...v1.5.2\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `flask-wtf` from 1.2.2 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets-eco/flask-wtf/releases\"\u003eflask-wtf's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003epre-commit autoupdate by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/607\"\u003epallets-eco/flask-wtf#607\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eremove slsa provenance by \u003ca href=\"https://github.com/davidism\"\u003e\u003ccode\u003e@​davidism\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/638\"\u003epallets-eco/flask-wtf#638\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for Python 3.14 by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/648\"\u003epallets-eco/flask-wtf#648\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eTry not to read uploaded files into memory by \u003ca href=\"https://github.com/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/649\"\u003epallets-eco/flask-wtf#649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReCaptcha field testing mode documentation by \u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow nonce in reCaptcha by \u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCSRF meta tag helper by \u003ca href=\"https://github.com/azmeuk\"\u003e\u003ccode\u003e@​azmeuk\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/674\"\u003epallets-eco/flask-wtf#674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ewidget support the kwargs to add custom html attributes by \u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRespect exempts in CSRFProtect.protect() by \u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdding RECAPTCHA_ENABLE to disable recaptcha by \u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eImprove CSRF Documentation by \u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\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/Zverik\"\u003e\u003ccode\u003e@​Zverik\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/635\"\u003epallets-eco/flask-wtf#635\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/OmeirP\"\u003e\u003ccode\u003e@​OmeirP\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/650\"\u003epallets-eco/flask-wtf#650\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kesara\"\u003e\u003ccode\u003e@​kesara\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/312\"\u003epallets-eco/flask-wtf#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/thivolle-cazat-cedric\"\u003e\u003ccode\u003e@​thivolle-cazat-cedric\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/353\"\u003epallets-eco/flask-wtf#353\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rauchy\"\u003e\u003ccode\u003e@​rauchy\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/419\"\u003epallets-eco/flask-wtf#419\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/rnt\"\u003e\u003ccode\u003e@​rnt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/509\"\u003epallets-eco/flask-wtf#509\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/israel-oye\"\u003e\u003ccode\u003e@​israel-oye\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/pull/584\"\u003epallets-eco/flask-wtf#584\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ehttps://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.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/pallets-eco/flask-wtf/blob/main/docs/changes.rst\"\u003eflask-wtf's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 1.3.0\u003c/h2\u003e\n\u003cp\u003eReleased 2026-04-23\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDon't read the whole uploaded files to know their size. :pr:\u003ccode\u003e635\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStop support for Python 3.9. Start support for Python 3.14. :pr:\u003ccode\u003e648\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eMigrate the project to uv. :pr:\u003ccode\u003e649\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAllow setting a \u003ccode\u003enonce\u003c/code\u003e on :class:\u003ccode\u003e~flask_wtf.recaptcha.RecaptchaField\u003c/code\u003e\n(string or zero-argument callable) for nonce-based Content Security\nPolicies. :pr:\u003ccode\u003e312\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003ecsrf_meta_tag()\u003c/code\u003e helper and \u003ccode\u003eWTF_CSRF_META_NAME\u003c/code\u003e setting to render\nthe CSRF token as an HTML \u003ccode\u003e\u0026lt;meta\u0026gt;\u003c/code\u003e tag.\u003c/li\u003e\n\u003cli\u003eForward keyword arguments passed to the reCAPTCHA widget as HTML attributes\non the captcha \u003ccode\u003e\u0026lt;div\u0026gt;\u003c/code\u003e, with the field id used as a default \u003ccode\u003eid\u003c/code\u003e.\n:pr:\u003ccode\u003e353\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eapply_exemptions\u003c/code\u003e parameter to\n:meth:\u003ccode\u003e~flask_wtf.csrf.CSRFProtect.protect\u003c/code\u003e so \u003ccode\u003e@csrf.exempt\u003c/code\u003e keeps working\nwhen validation is triggered manually. :pr:\u003ccode\u003e419\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRECAPTCHA_ENABLED\u003c/code\u003e setting. :pr:\u003ccode\u003e509\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-eco/flask-wtf/commit/63eb4d3bd55735fc136bdc6f23a90ca2b220b602\"\u003e\u003ccode\u003e63eb4d3\u003c/code\u003e\u003c/a\u003e chore: bump to v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/192ece3da0d98682c13e12574d7b1fc938bdd8e8\"\u003e\u003ccode\u003e192ece3\u003c/code\u003e\u003c/a\u003e Improve CSRF Documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/584\"\u003e#584\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/1f8522d4a362ee66ab12a1ebf55379501dfcef0d\"\u003e\u003ccode\u003e1f8522d\u003c/code\u003e\u003c/a\u003e Adding RECAPTCHA_ENABLE to disable recaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/64b9215be16dc123f7eb187494dbba6bd0e5c2cd\"\u003e\u003ccode\u003e64b9215\u003c/code\u003e\u003c/a\u003e Respect exempts in CSRFProtect.protect() (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/419\"\u003e#419\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/adf674f80c5c5e55c050729e3ec086b4d6cb0f26\"\u003e\u003ccode\u003eadf674f\u003c/code\u003e\u003c/a\u003e widget support the kwargs to add custom html attributes (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/353\"\u003e#353\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ea1f797112f857c783dcd2c6e3954357df8e1bb7\"\u003e\u003ccode\u003eea1f797\u003c/code\u003e\u003c/a\u003e feat: CSRF meta tag helper (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/674\"\u003e#674\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/412e3efda3703b141ca75afbcbf0538a7797b713\"\u003e\u003ccode\u003e412e3ef\u003c/code\u003e\u003c/a\u003e Allow nonce in reCaptcha (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/312\"\u003e#312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/a7b764a1fa8f4ea960d81104c364a2d29429e1b8\"\u003e\u003ccode\u003ea7b764a\u003c/code\u003e\u003c/a\u003e ReCaptcha field testing mode documentation (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/650\"\u003e#650\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/c053c0ec11560e68e558636962bbec1115a7ae2a\"\u003e\u003ccode\u003ec053c0e\u003c/code\u003e\u003c/a\u003e chore(deps-dev): bump pytest from 9.0.1 to 9.0.3 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/673\"\u003e#673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pallets-eco/flask-wtf/commit/ca2216cdf72717aa3c2355ba5f454080c78d9273\"\u003e\u003ccode\u003eca2216c\u003c/code\u003e\u003c/a\u003e chore(deps): bump uv from 0.9.11 to 0.11.6 (\u003ca href=\"https://redirect.github.com/pallets-eco/flask-wtf/issues/672\"\u003e#672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pallets-eco/flask-wtf/compare/v1.2.2...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `greenlet` from 3.3.2 to 3.5.0\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.0 (2026-04-27)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRemove the \u003ccode\u003eatexit\u003c/code\u003e callback. This callback caused greenlet APIs\nto become unavailable far too soon during interpreter shutdown. Now\nthey remain available while all \u003ccode\u003eatexit\u003c/code\u003e callbacks run. Sometime\nafter \u003ccode\u003ePy_IsFinalizing\u003c/code\u003e becomes true, they may begin misbehaving.\nBecause the order in which C extensions are finalized is undefined,\nC extensions that are sensitive to this need to check the results of\nthat function before invoking greenlet APIs. As a convenience,\n\u003ccode\u003ePyGreenlet_GetCurrent\u003c/code\u003e sets an exception and returns \u003ccode\u003eNULL\u003c/code\u003e\nwhen this happens (and \u003ccode\u003egreenlet.getcurrent\u003c/code\u003e begins returning\n\u003ccode\u003eNone\u003c/code\u003e); other greenlet C API functions have undefined behaviour.\nMethods invoked directly on pre-existing \u003ccode\u003egreenlet.greenlet\u003c/code\u003e\nobjects will continue to function at least until the greenlet C\nextension has been garbage collected and finalized.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 508 \u0026lt;https://github.com/python-greenlet/greenlet/pull/508\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e3.4.0 (2026-04-08)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003ePublish binary wheels for RiscV 64.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix multiple rare crash paths during interpreter shutdown.\u003c/p\u003e\n\u003cp\u003eNote that this now relies on the \u003ccode\u003eatexit\u003c/code\u003e module, and introduces\nsubtle API changes during interpreter shutdown (for example,\n\u003ccode\u003egetcurrent\u003c/code\u003e is no longer available once the \u003ccode\u003eatexit\u003c/code\u003e callback fires).\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR [#499](https://github.com/python-greenlet/greenlet/issues/499) \u0026lt;https://github.com/python-greenlet/greenlet/pull/499\u0026gt;\u003c/code\u003e_ by Nicolas\nBouvrette.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAddress the results of an automated code audit performed by\nDaniel Diniz. This includes several minor correctness changes that\ntheoretically could have been crashing bugs, but typically only in\nvery rare circumstances.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003ePR 502 \u0026lt;https://github.com/python-greenlet/greenlet/pull/502\u0026gt;\u003c/code\u003e_.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eFix several race conditions that could arise in free-threaded\nbuilds when using greenlet objects from multiple threads, some of\nwhich could lead to assertion failures or interpreter crashes.\u003c/p\u003e\n\u003cp\u003eSee \u003ccode\u003eissue 503 \u0026lt;https://github.com/python-greenlet/greenlet/issues/503\u0026gt;\u003c/code\u003e_, with\nthanks to Nitay Dariel and Daniel Diniz.\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/python-greenlet/greenlet/commit/c7acc72000572811d6462ebe01733a974f194990\"\u003e\u003ccode\u003ec7acc72\u003c/code\u003e\u003c/a\u003e Preparing release 3.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/d08f99bf40801c5d57af6e13631c0ba68300ecf7\"\u003e\u003ccode\u003ed08f99b\u003c/code\u003e\u003c/a\u003e CHANGES: Update link from \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/507\"\u003e#507\u003c/a\u003e to more full description in \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/fd3391e33cedc7a17a86059f18dfbec2b3a320bd\"\u003e\u003ccode\u003efd3391e\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/508\"\u003e#508\u003c/a\u003e from python-greenlet/issue507-remove-atexit\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/004e1e9bd5c0fa49c66b733c28ec92a3cd41fe09\"\u003e\u003ccode\u003e004e1e9\u003c/code\u003e\u003c/a\u003e Remove the atexit callback.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/b784a69a0da6abd6e66b15a2c1415d272fdd1292\"\u003e\u003ccode\u003eb784a69\u003c/code\u003e\u003c/a\u003e Back to development: 3.4.1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/df6734edbef6a0e54ecc4ba4735d93ae6d721095\"\u003e\u003ccode\u003edf6734e\u003c/code\u003e\u003c/a\u003e Preparing release 3.4.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/0f860756608b767b2ed70f935053b319d1a1b828\"\u003e\u003ccode\u003e0f86075\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/python-greenlet/greenlet/issues/504\"\u003e#504\u003c/a\u003e from python-greenlet/freethreading-fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/459657482f3efaee294edff672bde45ac3fac208\"\u003e\u003ccode\u003e4596574\u003c/code\u003e\u003c/a\u003e TLBC: crash appears to still happen on CI 3.14t ubuntu. Re-enable workaround.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/2f4a1cf53fa282ab28ea4815164a9cb09b9320ce\"\u003e\u003ccode\u003e2f4a1cf\u003c/code\u003e\u003c/a\u003e Make green_switch (python level greenlet.switch) and green_throw check for (p...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/python-greenlet/greenlet/commit/a0c2a2a7519985d5fe2c034a54f1a0fed82a5905\"\u003e\u003ccode\u003ea0c2a2a\u003c/code\u003e\u003c/a\u003e Fix unused variable warning when asserts are disabled.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/python-greenlet/greenlet/compare/3.3.2...3.5.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `idna` from 3.11 to 3.15\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/kjd/idna/blob/master/HISTORY.md\"\u003eidna's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e3.15 (2026-05-12)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEnforce DNS-length cap on individual labels early in \u003ccode\u003echeck_label\u003c/code\u003e,\nshort-circuiting contextual-rule processing for oversized input\nwhile staying compatible with UTS 46 usage.\u003c/li\u003e\n\u003cli\u003eTidy core helpers: hoist bidi category sets to module-level\nfrozensets (avoiding per-codepoint list construction), simplify\nlength checks, and reuse the shared \u003ccode\u003e_unicode_dots_re\u003c/code\u003e from\n\u003ccode\u003eidna.core\u003c/code\u003e in the codec module.\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eraise ... from err\u003c/code\u003e for proper exception chaining and\nswitch internal string formatting to f-strings.\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eflit_core\u003c/code\u003e 4.x in the build backend.\u003c/li\u003e\n\u003cli\u003eExpand the ruff lint set (flake8-bugbear, flake8-simplify,\npyupgrade, perflint) and apply the surfaced fixes; pin lint CI\nto Python 3.14.\u003c/li\u003e\n\u003cli\u003eAdd Dependabot configuration for GitHub Actions.\u003c/li\u003e\n\u003cli\u003eConvert README and HISTORY from reStructuredText to Markdown.\u003c/li\u003e\n\u003cli\u003eReference CVE-2026-45409 for the 3.14 advisory in place of the\ninitial GHSA identifier.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Felix Yan, Stan Ulbrych, and metsw24-max for\ncontributions to this release.\u003c/p\u003e\n\u003ch2\u003e3.14 (2026-05-10)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemoved opportunity to process long inputs into quadratic\ntime by rejecting oversize inputs up-front. Closes a bypass\nof the CVE-2024-3651 mitigation. [CVE-2026-45409]\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Stan Ulbrych for reporting the issue.\u003c/p\u003e\n\u003ch2\u003e3.13 (2026-04-22)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCorrect classification error for codepoint U+A7F1\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e3.12 (2026-04-21)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to Unicode 17.0.0.\u003c/li\u003e\n\u003cli\u003eIssue a deprecation warning for the transitional argument.\u003c/li\u003e\n\u003cli\u003eAdded lazy-loading to provide some performance improvements.\u003c/li\u003e\n\u003cli\u003eRemoved vestiges of code related to Python 2 support, including\nsegmentation of data structures specific to Jython.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThanks to Rodrigo Nogueira for contributions to this release.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/af30a092e158181d0b35ac66dfa813788126bdd8\"\u003e\u003ccode\u003eaf30a09\u003c/code\u003e\u003c/a\u003e Release 3.15\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/30314d4628744ca14cf2b5820564e5127a9f86f2\"\u003e\u003ccode\u003e30314d4\u003c/code\u003e\u003c/a\u003e Pre-release 3.15rc0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/05d4b219aa9eddc47371fcbd2000f0301016f3e9\"\u003e\u003ccode\u003e05d4b21\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/237\"\u003e#237\u003c/a\u003e from kjd/convert-docs-to-markdown\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/2987fdba1962bbb2358399e0084ba062b98a0bee\"\u003e\u003ccode\u003e2987fdb\u003c/code\u003e\u003c/a\u003e Convert README and HISTORY from reStructuredText to Markdown\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/59fa8002d514bf4a5ce7b58f67b9ec587d53fa9c\"\u003e\u003ccode\u003e59fa800\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/236\"\u003e#236\u003c/a\u003e from kjd/dependabot/github_actions/actions-f3e34333ea\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/def69834ced5d4b3c50439d8b99c4c856ec19ca2\"\u003e\u003ccode\u003edef6983\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into dependabot/github_actions/actions-f3e34333ea\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/bbd8004a797185d8c56bb555cd5c88fde05e0631\"\u003e\u003ccode\u003ebbd8004\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/234\"\u003e#234\u003c/a\u003e from StanFromIreland/patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/edd07c05024344a6ccb517414ccb36683aee99fc\"\u003e\u003ccode\u003eedd07c0\u003c/code\u003e\u003c/a\u003e Bump github/codeql-action from 3.35.2 to 4.35.2 in the actions group\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/5557db030c11bdec50d62aa5f631d705d33ba123\"\u003e\u003ccode\u003e5557db0\u003c/code\u003e\u003c/a\u003e Merge branch 'master' into patch-1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/kjd/idna/commit/f11746cf4981d25123ef7830d3ee60f07de8ae3d\"\u003e\u003ccode\u003ef11746c\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/kjd/idna/issues/235\"\u003e#235\u003c/a\u003e from StanFromIreland/patch-2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/kjd/idna/compare/v3.11...v3.15\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `ipython` from 9.11.0 to 9.13.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/7c1654dcb4bc0d4c841fbee1f5abf7c6c6007111\"\u003e\u003ccode\u003e7c1654d\u003c/code\u003e\u003c/a\u003e release 9.13.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/d7cd8a44234ddbdba782a42fce7893a4ff4529f4\"\u003e\u003ccode\u003ed7cd8a4\u003c/code\u003e\u003c/a\u003e Fix reStructuredText heading underline consistency in whatsnew (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15189\"\u003e#15189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/6542c95bef054c7ed4c1725047726b7140fe0e4d\"\u003e\u003ccode\u003e6542c95\u003c/code\u003e\u003c/a\u003e Fix RST header levels in whatsnew/version9.rst\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/0ca3e92249fb0af429b40e4827000955d5ceeeb3\"\u003e\u003ccode\u003e0ca3e92\u003c/code\u003e\u003c/a\u003e Prepare release notes for 9.13 (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15188\"\u003e#15188\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/9c8ce1184eceb865d392b39030d6c670caea89c5\"\u003e\u003ccode\u003e9c8ce11\u003c/code\u003e\u003c/a\u003e Revert release.py change, keep as dev\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/1fb2f7dc221e9b889d857b79c38704eab594d4c0\"\u003e\u003ccode\u003e1fb2f7d\u003c/code\u003e\u003c/a\u003e Prepare release notes for 9.13\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/be4179d1ba8b5c4e0f0d35a7d2f1654fd15c96e3\"\u003e\u003ccode\u003ebe4179d\u003c/code\u003e\u003c/a\u003e Implement support for image/png format in terminal (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15184\"\u003e#15184\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/1ec6bc9ca9558877b5bfccf66c22e8e61ceba83d\"\u003e\u003ccode\u003e1ec6bc9\u003c/code\u003e\u003c/a\u003e Implement support for image/png format in terminal\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/c6f48bceeec68b6ad9b9e6270eee9a7f4277b245\"\u003e\u003ccode\u003ec6f48bc\u003c/code\u003e\u003c/a\u003e solves \u003ca href=\"https://redirect.github.com/ipython/ipython/issues/14901\"\u003e#14901\u003c/a\u003e illegible yellow string on yellow background issue (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15156\"\u003e#15156\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/ipython/ipython/commit/8635f71fc551d76f017ad47c826bb7c7bfcb6b24\"\u003e\u003ccode\u003e8635f71\u003c/code\u003e\u003c/a\u003e fix: CapturedIO.\u003cstrong\u003einit\u003c/strong\u003e type annotations to accept Optional[StringIO] (\u003ca href=\"https://redirect.github.com/ipython/ipython/issues/15172\"\u003e#15172\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/ipython/ipython/compare/9.11.0...9.13.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `jedi` from 0.19.2 to 0.20.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/davidhalter/jedi/blob/master/CHANGELOG.rst\"\u003ejedi's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e0.20.0 (2026-05-02)\n+++++++++++++++++++\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3.14 support\u003c/li\u003e\n\u003cli\u003eRemoved support for Python 3.8 and 3.9\u003c/li\u003e\n\u003cli\u003eUpgraded Typeshed\u003c/li\u003e\n\u003cli\u003eBetter support for Final/ClassVar\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__new__\u003c/code\u003e is now also recognized as a signature and TypeVar inference\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eSelf\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupport for \u003ccode\u003eTypeAlias\u003c/code\u003e, generics for \u003ccode\u003etype[...]\u003c/code\u003e and \u003ccode\u003etuple[...]\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/davidhalter/jedi/commit/3102215478fe07b965dcd8221c17436d1dd7e8ac\"\u003e\u003ccode\u003e3102215\u003c/code\u003e\u003c/a\u003e Move the type parameter syntax tests so that it works for all versions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/1b37f2eb946e825cbc2887c6dd34ee046f0ae68c\"\u003e\u003ccode\u003e1b37f2e\u003c/code\u003e\u003c/a\u003e Prepare for the 0.20.0 release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8e4df5cc0ec511db1af6d358182b1fb7c1e0cbff\"\u003e\u003ccode\u003e8e4df5c\u003c/code\u003e\u003c/a\u003e Make sure the new generic syntax does not fail with latest parso\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/4c9dbcca0329454b638bfa32e2825bedcfdf0eac\"\u003e\u003ccode\u003e4c9dbcc\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/davidhalter/jedi/issues/2098\"\u003e#2098\u003c/a\u003e from davidhalter/updates\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/fedb1a5eb0d74446f6d431db2920ab5f1e1d5b18\"\u003e\u003ccode\u003efedb1a5\u003c/code\u003e\u003c/a\u003e Fix 3.10 tests in one more case\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/87e782f9c82de7297e243a770ac8888570bffa8e\"\u003e\u003ccode\u003e87e782f\u003c/code\u003e\u003c/a\u003e Fix flake8\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/cd52d982e10ac54f0ebef06e0bd414f79589998a\"\u003e\u003ccode\u003ecd52d98\u003c/code\u003e\u003c/a\u003e Fixes to get the tests passing for 3.10\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/d0b11806d4d1def377234bc2dc512992c997a977\"\u003e\u003ccode\u003ed0b1180\u003c/code\u003e\u003c/a\u003e Finally make tests work for 3.14\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/8520a9958b489bd8d30cf20b4d2798f7289aab45\"\u003e\u003ccode\u003e8520a99\u003c/code\u003e\u003c/a\u003e Implement support for TypeVar inference for \u003cstrong\u003enew\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/davidhalter/jedi/commit/55e5f0cb92dd92d5bdc80ecfc38664a1afd921d1\"\u003e\u003ccode\u003e55e5f0c\u003c/code\u003e\u003c/a\u003e Implement new-style unions with TypeVars\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/davidhalter/jedi/compare/v0.19.2...v0.20.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `kaleido` from 1.2.0 to 1.3.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/plotly/kaleido/releases\"\u003ekaleido's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow for request headers to be added to Choreographer calls [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/446\"\u003e#446\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUpdate Choreographer to v1.3.0 [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/449\"\u003e#449\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003cli\u003eFix issue where exporting large figures could cause hang [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/442\"\u003e#442\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/EliasTalcott\"\u003e\u003ccode\u003e@​EliasTalcott\u003c/code\u003e\u003c/a\u003e for the contribution!\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/Kaleido/blob/master/CHANGELOG.md\"\u003ekaleido's changelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.3.0\u003c/h2\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAllow for request headers to be added to Choreographer calls [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/446\"\u003e#446\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUpdate Choreographer to v1.3.0 [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/449\"\u003e#449\u003c/a\u003e]\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDeprecated\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003cli\u003eFix issue where exporting large figures could cause hang [\u003ca href=\"https://redirect.github.com/plotly/Kaleido/pull/442\"\u003e#442\u003c/a\u003e], with thanks to \u003ca href=\"https://github.com/EliasTalcott\"\u003e\u003ccode\u003e@​EliasTalcott\u003c/code\u003e\u003c/a\u003e for the contribution!\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.3.0rc0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSignificant refactor, better organization\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ewrite_fig\u003c/code\u003e and \u003ccode\u003e_from_object\u003c/code\u003e now take an additional argument:\n\u003ccode\u003ecancel_on_error: bool, default False\u003c/code\u003e. See docs.\u003c/li\u003e\n\u003cli\u003eUnused \u003ccode\u003epath\u003c/code\u003e argument for \u003ccode\u003ecalc_fig\u003c/code\u003e was deprecated.\u003c/li\u003e\n\u003cli\u003eFixed race condition where two render tasks would choose the same filename\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\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/Kaleido/commit/b7a00c41895ab71b67e5b89b40f186c3f1cecbed\"\u003e\u003ccode\u003eb7a00c4\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/451\"\u003e#451\u003c/a\u003e from plotly/release-v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/423a4f1cc6cbc701f9238281d63324508f12a272\"\u003e\u003ccode\u003e423a4f1\u003c/code\u003e\u003c/a\u003e Update setuptools config to find required subpackages\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/28131a743143cc5d134c6e962b603ff3a5ed6253\"\u003e\u003ccode\u003e28131a7\u003c/code\u003e\u003c/a\u003e Updates for release v1.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/f72dc86fa75afbca8756fcd9c9b5af550f038d75\"\u003e\u003ccode\u003ef72dc86\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/366\"\u003e#366\u003c/a\u003e from tschm/patch-3\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/0c5e89030709bc873806c08542ae66afea304f71\"\u003e\u003ccode\u003e0c5e890\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/450\"\u003e#450\u003c/a\u003e from plotly/cam/js-dependency-updates-may-2026\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/4e95de54ad7874e254665444070cf613104749f5\"\u003e\u003ccode\u003e4e95de5\u003c/code\u003e\u003c/a\u003e Bump pygments from 2.19.2 to 2.20.0 in /src/py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/90ddc9d7e83d4b27cc11a44a9ca15c5d2c6c5688\"\u003e\u003ccode\u003e90ddc9d\u003c/code\u003e\u003c/a\u003e Bump urllib3 from 2.2.3 to 2.6.3 in /src/py\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/f9b850eb38d7d9bb3f24258012d776f03ad355a0\"\u003e\u003ccode\u003ef9b850e\u003c/code\u003e\u003c/a\u003e chore: Update JS dependencies for security fixes\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/0978e65f23fbba486d005df1508e008a080d20e4\"\u003e\u003ccode\u003e0978e65\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/432\"\u003e#432\u003c/a\u003e from plotly/dependabot/npm_and_yarn/src/js/minimatch-...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/plotly/Kaleido/commit/b639582c0416f48a682ad01d157af22881d94f75\"\u003e\u003ccode\u003eb639582\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/plotly/kaleido/issues/429\"\u003e#429\u003c/a\u003e from plotly/dependabot/npm_and_yarn/src/js/qs-6.14.2\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/plotly/kaleido/compare/v1.2.0...v1.3.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `llvmlite` from 0.46.0b1 to 0.47.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/numba/llvmlite/releases\"\u003ellvmlite's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.47.0\u003c/h2\u003e\n\u003cp\u003eFor detailed release notes, see: \u003ca href=\"https://llvmlite.readthedocs.io/en/v0.47.0/\"\u003ehttps://llvmlite.readthedocs.io/en/v0.47.0/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e0.46.0\u003c/h2\u003e\n\u003cp\u003eFor detailed release notes, see: \u003ca href=\"https://llvmlite.readthedocs.io/en/v0.46.0\"\u003ehttps://llvmlite.readthedocs.io/en/v0.46.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/numba/llvmlite/commit/a1b33d2c2dac939a6263c544afd46eb66189b740\"\u003e\u003ccode\u003ea1b33d2\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numba/llvmlite/issues/1412\"\u003e#1412\u003c/a\u003e from swap357/release0.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/908fd0e36e1e8f0be1a36d66394b5bc838853106\"\u003e\u003ccode\u003e908fd0e\u003c/code\u003e\u003c/a\u003e add final changelog entry\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/f4f904208aec1d1516946f5f38a2737a61a8087e\"\u003e\u003ccode\u003ef4f9042\u003c/code\u003e\u003c/a\u003e update CHANGE_LOG for v0.47.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/01d2b0401d1a5e19b185c582c69421e15f166561\"\u003e\u003ccode\u003e01d2b04\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numba/llvmlite/issues/1406\"\u003e#1406\u003c/a\u003e from swap357/release0.47\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/2b62a94af24c109bfd9213422363f3e42e6b8070\"\u003e\u003ccode\u003e2b62a94\u003c/code\u003e\u003c/a\u003e update changelog for 0.47.0rc1\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/fafaa85470bd70aa31711f075f8fee7f3e5d3dee\"\u003e\u003ccode\u003efafaa85\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numba/llvmlite/issues/1403\"\u003e#1403\u003c/a\u003e from numba/renovate/major-github-artifact-actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/ec1375e4ba338a7960050260d6599c3549e48891\"\u003e\u003ccode\u003eec1375e\u003c/code\u003e\u003c/a\u003e chore(deps): update github artifact actions\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/numba/llvmlite/commit/d869142f16105eee20353379e65a4e6805d34c9d\"\u003e\u003ccode\u003ed869142\u003c/code\u003e\u003c/a\u003e Merge pull request \u003ca href=\"https://redirect.github.com/numba/llvmlite/issues/569\"\u003e#569\u003c/a\u003e from ARF1/wip/fix_setup_clean\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https:...\n\n_Description has been truncated_","html_url":"https://github.com/AnilKumarPacker/openalgo/pull/18","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/AnilKumarPacker%2Fopenalgo/issues/18","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/18/packages"}},{"old_version":"7.0.5","new_version":"7.1.3","update_type":"minor","path":null,"pr_created_at":"2026-05-19T02:11:23.000Z","version_change":"7.0.5 → 7.1.3","issue":{"uuid":"4473877687","node_id":"PR_kwDORxgoEs7c49ou","number":177,"state":"closed","title":"chore(deps): Bump the production group across 1 directory with 18 updates","user":"dependabot[bot]","labels":["dependencies","python"],"assignees":[],"locked":false,"comments_count":1,"pull_request":true,"closed_at":"2026-05-25T22:34:56.000Z","author_association":null,"state_reason":null,"created_at":"2026-05-19T02:11:23.000Z","updated_at":"2026-05-25T22:34:58.000Z","time_to_close":591813,"merged_at":null,"merged_by":null,"closed_by":null,"dependency_metadata":{"prefix":"chore(deps): Bump","group_name":"production","update_count":18,"packages":[{"name":"pandas","old_version":"3.0.2","new_version":"3.0.3","repository_url":"https://github.com/pandas-dev/pandas"},{"name":"numpy","old_version":"2.4.4","new_version":"2.4.6","repository_url":"https://github.com/numpy/numpy"},{"name":"pyarrow","old_version":"23.0.1","new_version":"24.0.0","repository_url":"https://github.com/apache/arrow"},{"name":"streamlit","old_version":"1.56.0","new_version":"1.57.0","repository_url":"https://github.com/streamlit/streamlit"},{"name":"pydantic","old_version":"2.13.3","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":"onnxruntime","old_version":"1.24.4","new_version":"1.26.0","repository_url":"https://github.com/microsoft/onnxruntime"},{"name":"altair","old_version":"6.0.0","new_version":"6.1.0","repository_url":"https://github.com/vega/altair"},{"name":"cachetools","old_version":"7.0.5","new_version":"7.1.3","repository_url":"https://github.com/tkem/cachetools"},{"name":"certifi","old_version":"2026.2.25","new_version":"2026.4.22","repository_url":"https://github.com/certifi/python-certifi"},{"name":"click","old_version":"8.3.2","new_version":"8.4.0","repository_url":"https://github.com/pallets/click"},{"name":"gitpython","old_version":"3.1.46","new_version":"3.1.50","repository_url":"https://github.com/gitpython-developers/GitPython"},{"name":"idna","old_version":"3.11","new_version":"3.15","repository_url":"https://github.com/kjd/idna"},{"name":"narwhals","old_version":"2.20.0","new_version":"2.21.2","repository_url":"https://github.com/narwhals-dev/narwhals"},{"name":"packaging","old_version":"26.1","new_version":"26.2","repository_url":"https://github.com/pypa/packaging"},{"name":"pydantic-core","old_version":"2.46.3","new_version":"2.46.4","repository_url":"https://github.com/pydantic/pydantic"},{"name":"tzdata","old_version":"2026.1","new_version":"2026.2","repository_url":"https://github.com/python/tzdata"},{"name":"urllib3","old_version":"2.6.3","new_version":"2.7.0","repository_url":"https://github.com/urllib3/urllib3"}],"path":null,"ecosystem":"pip"},"body":"Bumps the production group with 18 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [pandas](https://github.com/pandas-dev/pandas) | `3.0.2` | `3.0.3` |\n| [numpy](https://github.com/numpy/numpy) | `2.4.4` | `2.4.6` |\n| [pyarrow](https://github.com/apache/arrow) | `23.0.1` | `24.0.0` |\n| [streamlit](https://github.com/streamlit/streamlit) | `1.56.0` | `1.57.0` |\n| [pydantic](https://github.com/pydantic/pydantic) | `2.13.3` | `2.13.4` |\n| [requests](https://github.com/psf/requests) | `2.33.1` | `2.34.2` |\n| [onnxruntime](https://github.com/microsoft/onnxruntime) | `1.24.4` | `1.26.0` |\n| [altair](https://github.com/vega/altair) | `6.0.0` | `6.1.0` |\n| [cachetools](https://github.com/tkem/cachetools) | `7.0.5` | `7.1.3` |\n| [certifi](https://github.com/certifi/python-certifi) | `2026.2.25` | `2026.4.22` |\n| [click](https://github.com/pallets/click) | `8.3.2` | `8.4.0` |\n| [gitpython](https://github.com/gitpython-developers/GitPython) | `3.1.46` | `3.1.50` |\n| [idna](https://github.com/kjd/idna) | `3.11` | `3.15` |\n| [narwhals](https://github.com/narwhals-dev/narwhals) | `2.20.0` | `2.21.2` |\n| [packaging](https://github.com/pypa/packaging) | `26.1` | `26.2` |\n| [pydantic-core](https://github.com/pydantic/pydantic) | `2.46.3` | `2.46.4` |\n| [tzdata](https://github.com/python/tzdata) | `2026.1` | `2026.2` |\n| [urllib3](https://github.com/urllib3/urllib3) | `2.6.3` | `2.7.0` |\n\n\nUpdates `pandas` from 3.0.2 to 3.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pandas-dev/pandas/releases\"\u003epandas's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003epandas 3.0.3\u003c/h2\u003e\n\u003cp\u003eWe are pleased to announce the release of pandas 3.0.3.\nThis is a patch release in the 3.0.x series and includes some regression fixes and bug fixes. We recommend that all users of the 3.0.x series upgrade to this version.\u003c/p\u003e\n\u003cp\u003eSee the \u003ca href=\"https://pandas.pydata.org/docs/whatsnew/v3.0.3.html\"\u003efull whatsnew\u003c/a\u003e for a list of all the changes.\u003c/p\u003e\n\u003cp\u003ePandas 3.0 supports Python 3.11 and higher.\nThe release can be installed from PyPI:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython -m pip install --upgrade pandas==3.0.*\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOr from conda-forge\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003econda install -c conda-forge pandas=3.0\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003ePlease report any issues with the release on the \u003ca href=\"https://github.com/pandas-dev/pandas/issues\"\u003epandas issue tracker\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThanks to all the contributors who made this release possible.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/72f2fea91530b5abb3cf2100cb22d84e504695c0\"\u003e\u003ccode\u003e72f2fea\u003c/code\u003e\u003c/a\u003e RLS: 3.0.3 (\u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65590\"\u003e#65590\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/2897590094c2b6e3962d01a82665936f30be563d\"\u003e\u003ccode\u003e2897590\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65436\"\u003e#65436\u003c/a\u003e on branch 3.0.x (Account for privatization of matplotlib `...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/49894b5b6037c50f6444504070d9b1e8e514001a\"\u003e\u003ccode\u003e49894b5\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65499\"\u003e#65499\u003c/a\u003e on branch 3.0.x (BUG: fix check if pyarrow is installed in...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/1c6d1e30cc4b80bedb769a8b3731b0788f69c9dc\"\u003e\u003ccode\u003e1c6d1e3\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] PERF: remove special casing for zoneinfo in tz_localize_to_u...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/2a547116afc46d88d4e6584670fd793949222a1e\"\u003e\u003ccode\u003e2a54711\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/64379\"\u003e#64379\u003c/a\u003e on branch 3.0.x (PERF: improve performance with ZoneInfo t...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/036bb7c0e7160b9d5a7f6bd26a9fc00921fa6977\"\u003e\u003ccode\u003e036bb7c\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65482\"\u003e#65482\u003c/a\u003e on branch 3.0.x (PERF: don't call unique on dtypes for che...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/bf4c182b09251f5b469e8e246ae3ea3e1ae07164\"\u003e\u003ccode\u003ebf4c182\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65410\"\u003e#65410\u003c/a\u003e on branch 3.0.x (TST: also convert str index to object in ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/dd02d75ce219135f9f3f65c13644d4be35585d42\"\u003e\u003ccode\u003edd02d75\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] BUG: keep fsspec OpenFile alive for chained URL reads (\u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/6547\"\u003e#6547\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/aef3d0f6698667262c6d6ffc69180b280b0fa86a\"\u003e\u003ccode\u003eaef3d0f\u003c/code\u003e\u003c/a\u003e [backport 3.0.x] CI: lowercase types-pymysql/types-pyyaml to fix mamba 2.6.0 ...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/pandas-dev/pandas/commit/bb8e24876273a14322047f4b89e648f6a4abebae\"\u003e\u003ccode\u003ebb8e248\u003c/code\u003e\u003c/a\u003e Backport PR \u003ca href=\"https://redirect.github.com/pandas-dev/pandas/issues/65399\"\u003e#65399\u003c/a\u003e on branch 3.0.x (DOC: fix source link for classes in the r...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/pandas-dev/pandas/compare/v3.0.2...v3.0.3\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `numpy` from 2.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 `pyarrow` from 23.0.1 to 24.0.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/apache/arrow/releases\"\u003epyarrow's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eApache Arrow 24.0.0\u003c/h2\u003e\n\u003cp\u003eRelease Notes URL: \u003ca href=\"https://arrow.apache.org/release/24.0.0.html\"\u003ehttps://arrow.apache.org/release/24.0.0.html\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eApache Arrow 24.0.0 RC0\u003c/h2\u003e\n\u003cp\u003eRelease Notes: Release Candidate: 24.0.0 RC0\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/apache/arrow/commit/31b4b6c0a0a7e7c117312d285541a21446675ec6\"\u003e\u003ccode\u003e31b4b6c\u003c/code\u003e\u003c/a\u003e MINOR: [Release] Update versions for 24.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/06dbc179b4d4af4d8fcd2eb7365e4f0ccc37fcb5\"\u003e\u003ccode\u003e06dbc17\u003c/code\u003e\u003c/a\u003e MINOR: [Release] Update .deb/.rpm changelogs for 24.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/a021d80fffbcaa17959aa3cf491328cc389865aa\"\u003e\u003ccode\u003ea021d80\u003c/code\u003e\u003c/a\u003e MINOR: [Release] Update CHANGELOG.md for 24.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/2d6b12c9caced34a70207d2a303b2a00470e4388\"\u003e\u003ccode\u003e2d6b12c\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49716\"\u003eGH-49716\u003c/a\u003e: [C++] FixedShapeTensorType::Deserialize should strictly validate se...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/a74cb6aad96d3c7e7fbfad36ceb8e7f637229f54\"\u003e\u003ccode\u003ea74cb6a\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49697\"\u003eGH-49697\u003c/a\u003e: [C++][CI] Check IPC file body bounds are in sync with decoder outco...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/871a0c665647200b1ad1837ccebe64bfa703a5d3\"\u003e\u003ccode\u003e871a0c6\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49676\"\u003eGH-49676\u003c/a\u003e: [Python][Packaging] Fix gRPC docker image layer being too big for h...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/f9203b34e308a5ab67042fd9ddd5e7ab528896a2\"\u003e\u003ccode\u003ef9203b3\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49586\"\u003eGH-49586\u003c/a\u003e: [C++][CI] StructToStructSubset test failure with libc++ 22.1.1 (\u003ca href=\"https://redirect.github.com/apache/arrow/issues/49\"\u003e#49\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/fe298b424f4c7e33cdc9331221ece9302f6abb26\"\u003e\u003ccode\u003efe298b4\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49628\"\u003eGH-49628\u003c/a\u003e: [Python][Interchange protocol] Suppress warnings for pandas 4.0.0 a...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/1f94910cdd840a84c2007b5837e577d517be7984\"\u003e\u003ccode\u003e1f94910\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49252\"\u003eGH-49252\u003c/a\u003e: [GLib] Deprecate Feather features (\u003ca href=\"https://redirect.github.com/apache/arrow/issues/49673\"\u003e#49673\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/apache/arrow/commit/5ba5c3ca1af2d540f17bd1db91c103d40abefd1b\"\u003e\u003ccode\u003e5ba5c3c\u003c/code\u003e\u003c/a\u003e \u003ca href=\"https://redirect.github.com/apache/arrow/issues/49671\"\u003eGH-49671\u003c/a\u003e: [CI][Docs] Don't run jobs for push by Dependabot (\u003ca href=\"https://redirect.github.com/apache/arrow/issues/49672\"\u003e#49672\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/apache/arrow/compare/apache-arrow-23.0.1...apache-arrow-24.0.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `streamlit` from 1.56.0 to 1.57.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/streamlit/streamlit/releases\"\u003estreamlit's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.57.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003ch3\u003eBreaking Changes 🛠\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[feature] Make Starlette the default server and remove Tornado by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14553\"\u003estreamlit/streamlit#14553\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Remove deprecated kwargs from \u003ccode\u003eplotly_chart\u003c/code\u003e and \u003ccode\u003evega_lite_chart\u003c/code\u003e by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14800\"\u003estreamlit/streamlit#14800\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Remove deprecated \u003ccode\u003e_get_websocket_headers\u003c/code\u003e function by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14801\"\u003estreamlit/streamlit#14801\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Direct polars to arrow conversion bypassing pandas by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14885\"\u003estreamlit/streamlit#14885\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eNew Features 🎉\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[feature] Hide chevron for menu-style icon labels for \u003ccode\u003est.menu_button\u003c/code\u003e and \u003ccode\u003est.popover\u003c/code\u003e by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14697\"\u003estreamlit/streamlit#14697\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Add pills, segmented_control properties and dataframe key to AppTest by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14518\"\u003estreamlit/streamlit#14518\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Add \u003ccode\u003etitle\u003c/code\u003e parameter to alert elements by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14665\"\u003estreamlit/streamlit#14665\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feat] Add \u003ccode\u003e:shimmer[]\u003c/code\u003e markdown directive for animated loading text by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14055\"\u003estreamlit/streamlit#14055\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Expose \u003ccode\u003eApp\u003c/code\u003e in the \u003ccode\u003est\u003c/code\u003e namespace by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14722\"\u003estreamlit/streamlit#14722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBundle OSS developing-with-streamlit core skills in pip package by \u003ca href=\"https://github.com/sfc-gh-nbellante\"\u003e\u003ccode\u003e@​sfc-gh-nbellante\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14745\"\u003estreamlit/streamlit#14745\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Add border radius to video and map elements by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14781\"\u003estreamlit/streamlit#14781\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Add \u003ccode\u003esecrets\u003c/code\u003e parameter to \u003ccode\u003est.App\u003c/code\u003e by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14861\"\u003estreamlit/streamlit#14861\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd app and theme templates to bundled skills by \u003ca href=\"https://github.com/sfc-gh-nbellante\"\u003e\u003ccode\u003e@​sfc-gh-nbellante\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14746\"\u003estreamlit/streamlit#14746\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[feature] Expose \u003ccode\u003est.bottom\u003c/code\u003e container by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14726\"\u003estreamlit/streamlit#14726\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes 🐛\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[feature] Deduplicate equivalent file extensions in file uploader display by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14552\"\u003estreamlit/streamlit#14552\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] \u003ccode\u003est.dataframe\u003c/code\u003e crash with pandas 3 ArrowStringArray by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14611\"\u003estreamlit/streamlit#14611\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix(caching): chain original exception in UnserializableReturnValueError by \u003ca href=\"https://github.com/mango766\"\u003e\u003ccode\u003e@​mango766\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14655\"\u003estreamlit/streamlit#14655\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] inconsistent space encoding in query params by \u003ca href=\"https://github.com/sfc-gh-lwilby\"\u003e\u003ccode\u003e@​sfc-gh-lwilby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14691\"\u003estreamlit/streamlit#14691\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Preserve \u003ccode\u003eNone\u003c/code\u003e values in \u003ccode\u003est.data_editor\u003c/code\u003e with pandas 3.0+ by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14694\"\u003estreamlit/streamlit#14694\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[Fix] Add CSS Color Level 4 support by \u003ca href=\"https://github.com/mayagbarnes\"\u003e\u003ccode\u003e@​mayagbarnes\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14674\"\u003estreamlit/streamlit#14674\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Evict namespace children when watched sources reload by \u003ca href=\"https://github.com/sfc-gh-lwilby\"\u003e\u003ccode\u003e@​sfc-gh-lwilby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14708\"\u003estreamlit/streamlit#14708\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Downcast large Arrow types in custom component v1 serialization by \u003ca href=\"https://github.com/sfc-gh-nbellante\"\u003e\u003ccode\u003e@​sfc-gh-nbellante\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14617\"\u003estreamlit/streamlit#14617\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] Retain st.radio selection for format_func and custom options by \u003ca href=\"https://github.com/sfc-gh-lwilby\"\u003e\u003ccode\u003e@​sfc-gh-lwilby\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14815\"\u003estreamlit/streamlit#14815\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix bar_chart axis labels not swapping when horizontal=True by \u003ca href=\"https://github.com/kmcgrady\"\u003e\u003ccode\u003e@​kmcgrady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14866\"\u003estreamlit/streamlit#14866\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[fix] st.text_area height='content' sizing on initial load by \u003ca href=\"https://github.com/lukasmasuch\"\u003e\u003ccode\u003e@​lukasmasuch\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14884\"\u003estreamlit/streamlit#14884\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e[chore] Update emojis/material icons by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14576\"\u003estreamlit/streamlit#14576\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Release v1.56.0 by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14598\"\u003estreamlit/streamlit#14598\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs for dataframe programmatic selections by \u003ca href=\"https://github.com/MathCatsAnd\"\u003e\u003ccode\u003e@​MathCatsAnd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14616\"\u003estreamlit/streamlit#14616\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Update emojis/material icons by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14649\"\u003estreamlit/streamlit#14649\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Update emojis/material icons by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14752\"\u003estreamlit/streamlit#14752\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e[chore] Update emojis/material icons by \u003ca href=\"https://github.com/github-actions\"\u003e\u003ccode\u003e@​github-actions\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14869\"\u003estreamlit/streamlit#14869\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocs for audio and video columns by \u003ca href=\"https://github.com/MathCatsAnd\"\u003e\u003ccode\u003e@​MathCatsAnd\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14628\"\u003estreamlit/streamlit#14628\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/dagecko\"\u003e\u003ccode\u003e@​dagecko\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14554\"\u003estreamlit/streamlit#14554\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/mango766\"\u003e\u003ccode\u003e@​mango766\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14655\"\u003estreamlit/streamlit#14655\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/sfc-gh-wschmitt\"\u003e\u003ccode\u003e@​sfc-gh-wschmitt\u003c/code\u003e\u003c/a\u003e made their first contribution in \u003ca href=\"https://redirect.github.com/streamlit/streamlit/pull/14922\"\u003estreamlit/streamlit#14922\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca href=\"https://github.com/streamlit/streamlit/compare/1.56.0...1.57.0\"\u003ehttps://github.com/streamlit/streamlit/compare/1.56.0...1.57.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/streamlit/streamlit/commit/62ec5f3b703cd47a89d5400e7da1398d64226989\"\u003e\u003ccode\u003e62ec5f3\u003c/code\u003e\u003c/a\u003e Up version to 1.57.0\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/543575f59dd45709a1844d842f1125c860c4aa54\"\u003e\u003ccode\u003e543575f\u003c/code\u003e\u003c/a\u003e feat(host-comm): add PRINT_APP host-to-guest postMessage type (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14922\"\u003e#14922\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/fa67e32019b57d2a17d169c2132a9bf87cebe7fa\"\u003e\u003ccode\u003efa67e32\u003c/code\u003e\u003c/a\u003e [feature] Expose \u003ccode\u003est.bottom\u003c/code\u003e container (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14726\"\u003e#14726\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/e463b411086b509a49ad3e1152137ec1ef1b4385\"\u003e\u003ccode\u003ee463b41\u003c/code\u003e\u003c/a\u003e [feature] Add installed_skills (and agents) telemetry to page profile (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14916\"\u003e#14916\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/985fa7b6f4a77e86cefeca10794d236a8ae7fcf3\"\u003e\u003ccode\u003e985fa7b\u003c/code\u003e\u003c/a\u003e Add app and theme templates to bundled skills (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14746\"\u003e#14746\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/bea9013f5d21beadef88cbac2493d7defcf616e0\"\u003e\u003ccode\u003ebea9013\u003c/code\u003e\u003c/a\u003e [feature] Add \u003ccode\u003esecrets\u003c/code\u003e parameter to \u003ccode\u003est.App\u003c/code\u003e (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14861\"\u003e#14861\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/b13f0fa386b9af7323b6216c458f6ce971811b06\"\u003e\u003ccode\u003eb13f0fa\u003c/code\u003e\u003c/a\u003e [skill] Set minimum height for embedded apps (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14498\"\u003e#14498\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/1f7abf9d79a075baf5ae6439efade69fafcce129\"\u003e\u003ccode\u003e1f7abf9\u003c/code\u003e\u003c/a\u003e [feature] Direct polars to arrow conversion bypassing pandas (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14885\"\u003e#14885\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/dbacaad563b357443363790fb68655507ebebf75\"\u003e\u003ccode\u003edbacaad\u003c/code\u003e\u003c/a\u003e [fix] Add border radius to video and map elements (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14781\"\u003e#14781\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/streamlit/streamlit/commit/5cb5545740bc7bbb98b86355b9e9210492bbb3f2\"\u003e\u003ccode\u003e5cb5545\u003c/code\u003e\u003c/a\u003e Bump ruff from 0.15.10 to 0.15.11 (\u003ca href=\"https://redirect.github.com/streamlit/streamlit/issues/14908\"\u003e#14908\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/streamlit/streamlit/compare/1.56.0...1.57.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/v2.13.4/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 `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 `onnxruntime` from 1.24.4 to 1.26.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/microsoft/onnxruntime/releases\"\u003eonnxruntime's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.26.0\u003c/h2\u003e\n\u003cp\u003en.b. The following was generated via LLM from Git history. Only the contributor list has been verified.\u003c/p\u003e\n\u003ch1\u003eONNX Runtime Release 1.26.0\u003c/h1\u003e\n\u003ch2\u003eAnnouncement - Breaking Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSupport for CUDA 12 will be removed in 1.27.0.\u003c/strong\u003e\n\u003cul\u003e\n\u003cli\u003eCUDA 13 will continue to be published as \u003ccode\u003eonnxruntime-\u0026lt;os\u0026gt;-\u0026lt;arch\u0026gt;-gpu_cuda13-\u0026lt;version\u0026gt;.\u0026lt;ext\u0026gt;\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eCUDA runtime will be moving soon to a dedicated Execution Provider (EP) instead of a published package from ORT core.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eHighlights\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded optional memory mapping for \u003ccode\u003e.ort\u003c/code\u003e model loads (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28164\"\u003e#28164\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded RISC-V Vector (RVV) support for CPU EP (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28261\"\u003e#28261\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eOpenVINO EP upgraded for 1.26.0 development release (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28297\"\u003e#28297\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eWebGPU gained GridSample support (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28264\"\u003e#28264\u003c/a\u003e) and Split-K improvements (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28151\"\u003e#28151\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCUDA plugin EP gained graph support (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28002\"\u003e#28002\u003c/a\u003e), profiling API (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28216\"\u003e#28216\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity and Reliability Hardening\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eReplaced unrestricted Python \u003ccode\u003esetattr\u003c/code\u003e configuration with an allowlist (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28083\"\u003e#28083\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eHardened multiple OOB and overflow scenarios across ML and core ops:\n\u003cul\u003e\n\u003cli\u003eAttention mask index OOB write (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27789\"\u003e#27789\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMaxPoolGrad indices bounds validation (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27903\"\u003e#27903\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eSVM and TreeEnsemble bounds/security fixes (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27950\"\u003e#27950\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27951\"\u003e#27951\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27952\"\u003e#27952\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27989\"\u003e#27989\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eRNN sequence_lens OOB read and integer overflow handling (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28052\"\u003e#28052\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28003\"\u003e#28003\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGroupQueryAttention seqlens_k bounds validation and compatibility follow-up (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28031\"\u003e#28031\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28259\"\u003e#28259\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eMatMulBnb4 and ML coefficient SafeInt checks (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27995\"\u003e#27995\u003c/a\u003e, \u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28001\"\u003e#28001\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCUDA Gather int32 overflow fix (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28108\"\u003e#28108\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eGridSample float-\u0026gt;int64 cast hardening for NaN/Inf/out-of-range coords (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28302\"\u003e#28302\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFixed session logger use-after-free during EP teardown under verbose logging (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28274\"\u003e#28274\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eCUDA, Attention, and MLAS\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFilled CUDA opset/operator gaps and extended support:\n\u003cul\u003e\n\u003cli\u003eTranspose opset 23 -\u0026gt; 25 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27740\"\u003e#27740\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eQuantizeLinear/DequantizeLinear opset 25 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28046\"\u003e#28046\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eCUDA TopK INT8/INT16/UINT8 support (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27862\"\u003e#27862\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eLabelEncoder CUDA support for numeric types (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28045\"\u003e#28045\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAttention/GQA improvements:\n\u003cul\u003e\n\u003cli\u003eFixed ONNX Attention min-bias alignment crash on SM\u0026lt;80 and masked-batch NaN behavior (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27831\"\u003e#27831\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded FP32 QK accumulation path for unfused GQA attention (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28198\"\u003e#28198\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eAdded CUDART_VERSION reduction compatibility in GQA attention (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28296\"\u003e#28296\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eFixed CUDA 13 build error in GQA unfused attention (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28309\"\u003e#28309\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003ePagedAttention fallback for SM\u0026lt;80 fp16 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/28200\"\u003e#28200\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eMLAS updates:\n\u003cul\u003e\n\u003cli\u003eFP16 Gelu enablement (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/26815\"\u003e#26815\u003c/a\u003e).\u003c/li\u003e\n\u003cli\u003eArm64 BF16 fast-math conv kernels for NCHW/NCHWc paths (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/pull/27878\"\u003e#27878\u003c/a\u003e).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/8c546c37b43caaca1fa25db430dab94b901cf277\"\u003e\u003ccode\u003e8c546c3\u003c/code\u003e\u003c/a\u003e 1.26.0 - cherry-pick for RC2 (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28347\"\u003e#28347\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/55c5c822a02e6237a667c13cd5ed008cd55bb459\"\u003e\u003ccode\u003e55c5c82\u003c/code\u003e\u003c/a\u003e GridSample: harden float-\u0026gt;int64 casts against NaN/Inf/out-of-range coords (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/2\"\u003e#2\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/60ce9ccd65ebb1794110c4dddf2e110cf223e9f9\"\u003e\u003ccode\u003e60ce9cc\u003c/code\u003e\u003c/a\u003e Relax GQA seqlens_k shape validation for backward compat with older models (#...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/d02a0fd536d7cf6b88bfd268932d2933a1c3305c\"\u003e\u003ccode\u003ed02a0fd\u003c/code\u003e\u003c/a\u003e Fix DoubleQDQPairsRemover adding spurious dimension to scalar scale/zero-poin...\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/9b30f306e40683df362249b7c139177cc83e352f\"\u003e\u003ccode\u003e9b30f30\u003c/code\u003e\u003c/a\u003e remove weights_are_all_positive_  from TreeEnsemble (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/27552\"\u003e#27552\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/5f2f848a6874d390c94502b3bb424447b119b975\"\u003e\u003ccode\u003e5f2f848\u003c/code\u003e\u003c/a\u003e fix(ci): incorrect relative template includes for setup-feeds (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28312\"\u003e#28312\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/de2bc90ce09d8bab419e07e1db741f445a27f721\"\u003e\u003ccode\u003ede2bc90\u003c/code\u003e\u003c/a\u003e Add QNN Plugin EP repo link to README (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28225\"\u003e#28225\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/8dd4a06811179a7c04aea0a97c65f45a3dc8c6af\"\u003e\u003ccode\u003e8dd4a06\u003c/code\u003e\u003c/a\u003e Include license file in built distributions (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/27783\"\u003e#27783\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/6e19374beb24cc2fa0e8262c6d51404af87aefc0\"\u003e\u003ccode\u003e6e19374\u003c/code\u003e\u003c/a\u003e Fix CUDA 13 build error in gqa_unfused_attention.cu (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28309\"\u003e#28309\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/microsoft/onnxruntime/commit/d6c363c0d192bf2205155a18f01a62efa6b34da1\"\u003e\u003ccode\u003ed6c363c\u003c/code\u003e\u003c/a\u003e [OVEP] OpenVINO EP 1.26.0 Development Release Updates (\u003ca href=\"https://redirect.github.com/microsoft/onnxruntime/issues/28297\"\u003e#28297\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/microsoft/onnxruntime/compare/v1.24.4...v1.26.0\"\u003ecompare view\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `altair` from 6.0.0 to 6.1.0\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.1.0\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003eWhat's Changed\u003c/h2\u003e\n\u003cp\u003eThere are many exciting improvements in this release! Read on for details and a big thanks to everyone who contributed  :tada:\u003c/p\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efeat: Update to Vega-Lite 6.4.1 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/4005\"\u003evega/altair#4005\u003c/a\u003e. See \u003ca href=\"https://github.com/vega/vega-lite/releases\"\u003ethe Vega-Lite Release Notes\u003c/a\u003e for details; a few highlights:\n\u003cul\u003e\n\u003cli\u003eNewlines are now supported in tooltips.\u003c/li\u003e\n\u003cli\u003eThe default stack order of marks like bars and areas is now aligned with the color domain.\u003c/li\u003e\n\u003cli\u003eInteractive charts automatically change the cursor to pointer to indicate they can be interacted with.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efeat: auto hoist facet encodings in layer by \u003ca href=\"https://github.com/thomascamminady\"\u003e\u003ccode\u003e@​thomascamminady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3965\"\u003evega/altair#3965\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eThis allows layering of simple faceted charts that define the same facet variables, instead of requiring that layering happens before faceting.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003efeat: Accept ZoneInfo(key='UTC') by \u003ca href=\"https://github.com/JackKelly\"\u003e\u003ccode\u003e@​JackKelly\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3944\"\u003evega/altair#3944\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add pandas 3 compatibility and fix CI (drop Python 3.9, pin polars \u0026lt;1.38) by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3950\"\u003evega/altair#3950\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add ensure_ascii option to to_json() with default False by \u003ca href=\"https://github.com/RamiNoodle733\"\u003e\u003ccode\u003e@​RamiNoodle733\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3952\"\u003evega/altair#3952\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: unique view names per concat cell and correct param.views by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3974\"\u003evega/altair#3974\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: Compute unique hashes for identical specs that use different data 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/3982\"\u003evega/altair#3982\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: preserve polars datetime timezones during serialization by \u003ca href=\"https://github.com/kjgoodrick\"\u003e\u003ccode\u003e@​kjgoodrick\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3922\"\u003evega/altair#3922\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: type issues with Chart save methods. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3934\"\u003evega/altair#3934\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: type issues with Chart mark methods. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3936\"\u003evega/altair#3936\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: improve api.py typing by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3955\"\u003evega/altair#3955\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: typing issues for mypy 1.18 and above. by \u003ca href=\"https://github.com/alec-bike\"\u003e\u003ccode\u003e@​alec-bike\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3966\"\u003evega/altair#3966\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocs: Highlight new examples in the gallery 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/3999\"\u003evega/altair#3999\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003eIt's now easier to find which examples have been \u003ca href=\"https://altair-viz.github.io/gallery/index.html\"\u003erecently added to the Altair gallery\u003c/a\u003e and the page looks more visually appealing overall.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003edocs: add WASM / Pyodide installation instructions by \u003ca href=\"https://github.com/ArnavTomar18\"\u003e\u003ccode\u003e@​ArnavTomar18\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3932\"\u003evega/altair#3932\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Correct some grammar issues by \u003ca href=\"https://github.com/star1327p\"\u003e\u003ccode\u003e@​star1327p\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3942\"\u003evega/altair#3942\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add identity line (x=y diagonal) example to rule mark docs by \u003ca href=\"https://github.com/stbiadmin\"\u003e\u003ccode\u003e@​stbiadmin\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3969\"\u003evega/altair#3969\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Correct tooltip field for faceted choropleth example by \u003ca href=\"https://github.com/Sparlitu\"\u003e\u003ccode\u003e@​Sparlitu\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3920\"\u003evega/altair#3920\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: wrong tooltip variable id -\u0026gt; county_id by \u003ca href=\"https://github.com/thomascamminady\"\u003e\u003ccode\u003e@​thomascamminady\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3924\"\u003evega/altair#3924\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: a HConcatChart -\u0026gt; an HConcatChart by \u003ca href=\"https://github.com/star1327p\"\u003e\u003ccode\u003e@​star1327p\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3917\"\u003evega/altair#3917\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Substitute field strings correctly so that points in theme display chart show up 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/3984\"\u003evega/altair#3984\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Change the lead size to fit on two rows 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/3980\"\u003evega/altair#3980\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Make the first page title fit on one row 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/3979\"\u003evega/altair#3979\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Fix broken density example 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/3985\"\u003evega/altair#3985\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Simplify inline expr syntax 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/3996\"\u003evega/altair#3996\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eOther Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebuild: Speed up doc build time for faster local development 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/3997\"\u003evega/altair#3997\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Add watch option to automatically rebuild docs upon detected changes 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/3998\"\u003evega/altair#3998\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild: Create docs CLI to facilitate different build combinations 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/4000\"\u003evega/altair#4000\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: bump dev version to 6.1.0dev by \u003ca href=\"https://github.com/mattijn\"\u003e\u003ccode\u003e@​mattijn\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3913\"\u003evega/altair#3913\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003estyle: Make chained chart methods work with type checkers other than pyright by \u003ca href=\"https://github.com/hamdanal\"\u003e\u003ccode\u003e@​hamdanal\u003c/code\u003e\u003c/a\u003e in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3933\"\u003evega/altair#3933\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: bump actions/checkout from 5 to 6 in the github-actions group by \u003ca href=\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot] in \u003ca href=\"https://redirect.github.com/vega/altair/pull/3928\"\u003evega/altair#3928\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebuild(deps): bump urllib3 from 2.5.0 to 2.6.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/vega/altair/pull/3939\"\u003evega/altair#3939\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/vega/altair/commit/af1450f413fd046da032857519bba536dad97910\"\u003e\u003ccode\u003eaf1450f\u003c/code\u003e\u003c/a\u003e chore: 🔧 Bump versions for release\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/af071276321b64a8ea66a773dbc60d659dd41fa1\"\u003e\u003ccode\u003eaf07127\u003c/code\u003e\u003c/a\u003e feat: Update to Vega-Lite 6.4.1 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4005\"\u003e#4005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/e093674705eebaab23887318e190b0cc0977cc21\"\u003e\u003ccode\u003ee093674\u003c/code\u003e\u003c/a\u003e harden prerelease workflow (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4008\"\u003e#4008\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/942dead2972aee5efde8f1488b06c0a8fba58b26\"\u003e\u003ccode\u003e942dead\u003c/code\u003e\u003c/a\u003e build(deps): bump uv from 0.10.4 to 0.11.6 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4004\"\u003e#4004\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/127f79f7b456450729914950ec2a063c02699b9c\"\u003e\u003ccode\u003e127f79f\u003c/code\u003e\u003c/a\u003e docs: Highlight new examples in the gallery (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3999\"\u003e#3999\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/59561f8fee41d0d1d872f9dba855cc36651c869e\"\u003e\u003ccode\u003e59561f8\u003c/code\u003e\u003c/a\u003e fix: Compute unique hashes for identical specs that use different data (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3982\"\u003e#3982\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/60a3fb7da35b5f4b9c715b85e6a81c0154df7cc9\"\u003e\u003ccode\u003e60a3fb7\u003c/code\u003e\u003c/a\u003e build(deps): bump tornado from 6.5.4 to 6.5.5 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/3978\"\u003e#3978\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/33bc6379e7c0e38f92a04a84ed52d39c02fb3f38\"\u003e\u003ccode\u003e33bc637\u003c/code\u003e\u003c/a\u003e build(deps): bump cryptography from 46.0.6 to 46.0.7 (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4003\"\u003e#4003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/88c446951eb48c13c8078a392f4d79e8b63453d2\"\u003e\u003ccode\u003e88c4469\u003c/code\u003e\u003c/a\u003e docs: Create docs CLI to facilitate different build combinations (\u003ca href=\"https://redirect.github.com/vega/altair/issues/4000\"\u003e#4000\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/vega/altair/commit/a4a20ccc898c487fe80e3c7118bafb58872df113\"\u003e\u003ccode\u003ea4a20cc\u003c/code\u003e\u003c/a\u003e docs: Add watch option to automatically rebuild docs upon detected changes (#...\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/vega/altair/compare/v6.0.0...v6.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.3\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.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/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\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/ed107816b6787d74f21684f6614d4fbbbbb935de\"\u003e\u003ccode\u003eed10781\u003c/code\u003e\u003c/a\u003e Update Copilot instructions.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/c624ceb350d50bb733ccaa706613495999b9479f\"\u003e\u003ccode\u003ec624ceb\u003c/code\u003e\u003c/a\u003e Fix \u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/395\"\u003e#395\u003c/a\u003e: Document FIFOCache update behavior.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/1ddec068633641895b6926dcea27276d5149c038\"\u003e\u003ccode\u003e1ddec06\u003c/code\u003e\u003c/a\u003e Fix/396 (\u003ca href=\"https://redirect.github.com/tkem/cachetools/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/tkem/cachetools/commit/b91818c46624b3be3f4b321426061ba50c08a30e\"\u003e\u003ccode\u003eb91818c\u003c/code\u003e\u003c/a\u003e Drop MANIFEST.in.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca href=\"https://github.com/tkem/cachetools/compare/v7.0.5...v7.1.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.2.25 to 2026.4.22\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/5dddfb072243da27adde885b73ba9b809c3224ca\"\u003e\u003ccode\u003e5dddfb0\u003c/code\u003e\u003c/a\u003e 2026.04.22 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/410\"\u003e#410\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/f99eccdaf87f7c10e521a58a700ca3eb94a0787e\"\u003e\u003ccode\u003ef99eccd\u003c/code\u003e\u003c/a\u003e Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/404\"\u003e#404\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/918bed055f7291719512af186c1c24710f845660\"\u003e\u003ccode\u003e918bed0\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 7.0.0 to 7.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/405\"\u003e#405\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/0a49067eb434e53e1f8df5f7707d5dc05ef9def4\"\u003e\u003ccode\u003e0a49067\u003c/code\u003e\u003c/a\u003e Bump pypa/gh-action-pypi-publish from 1.13.0 to 1.14.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/403\"\u003e#403\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/acf6ce8e39e3b125f4349e11904295e4fe4c1bed\"\u003e\u003ccode\u003eacf6ce8\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 8.0.0 to 8.0.1 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/398\"\u003e#398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/feb0ed26163a9417ea0fb8eb52d47e79fcf202ab\"\u003e\u003ccode\u003efeb0ed2\u003c/code\u003e\u003c/a\u003e Bump actions/download-artifact from 7.0.0 to 8.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/397\"\u003e#397\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/certifi/python-certifi/commit/d9c11a50369cc377abb40f7909ded3d6da4d98a3\"\u003e\u003ccode\u003ed9c11a5\u003c/code\u003e\u003c/a\u003e Bump actions/upload-artifact from 6.0.0 to 7.0.0 (\u003ca href=\"https://redirect.github.com/certifi/python-certifi/issues/396\"\u003e#396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca href=\"https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22\"\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.2 to 8.4.0\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca href=\"https://github.com/pallets/click/releases\"\u003eclick's releases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e8.4.0\u003c/h2\u003e\n\u003cp\u003eThis is the Click 8.4.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.\u003c/p\u003e\n\u003cp\u003eWe encourage everyone to upgrade. You can read more about our \u003ca href=\"https://palletsprojects.com/versions\"\u003eVersion Support Policy\u003c/a\u003e on our website.\u003c/p\u003e\n\u003cp\u003ePyPI: \u003ca href=\"https://pypi.org/project/click/8.4.0/\"\u003ehttps://pypi.org/project/click/8.4.0/\u003c/a\u003e\nChanges:  \u003ca href=\"https://click.palletsprojects.com/page/changes/#version-8-4-0\"\u003ehttps://click.palletsprojects.com/page/changes/#version-8-4-0\u003c/a\u003e\nMilestone \u003ca href=\"https://github.com/pallets/click/milestone/30\"\u003ehttps://github.com/pallets/click/milestone/30\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParamType\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/3371\"\u003e#3371\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003eParamType\u003c/code\u003e is now a generic abstract base class,\nparameterized by its converted value type.\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.convert\u003c/code\u003e return types are narrowed on all\nconcrete types (\u003ccode\u003estr\u003c/code\u003e for :class:\u003ccode\u003eSTRING\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e for\n:class:\u003ccode\u003eINT\u003c/code\u003e, etc.).\u003c/li\u003e\n\u003cli\u003e:meth:\u003ccode\u003e~ParamType.to_info_dict\u003c/code\u003e returns specific\n:class:\u003ccode\u003e~typing.TypedDict\u003c/code\u003e subclasses instead of\n\u003ccode\u003edict[str, Any]\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e:class:\u003ccode\u003eCompositeParamType\u003c/code\u003e and the number-range base are now\ngeneric with abstract methods.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eRefactor \u003ccode\u003econvert_type\u003c/code\u003e to extract type inference into a private\n\u003ccode\u003e_guess_type\u003c/code\u003e helper, and add :func:\u003ccode\u003etyping.overload\u003c/code\u003e signatures.\n\u003ca href=\"https://redirect.github.com/pallets/click/issues/3372\"\u003e#3372\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eParameter\u003c/code\u003e typing improvements. \u003ca href=\"https://redirect.github.com/pallets/click/issues/2805\"\u003e#2805\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e:class:\u003ccode\u003ePa...\n\n_Description has been truncated_","html_url":"https://github.com/IlyaNovikov-RD/rocket_classifier/pull/177","url":"https://dependabot.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaNovikov-RD%2Frocket_classifier/issues/177","packages_url":"https://dependabot.ecosyste.ms/api/v1/issues/177/packages"}}]}